Home | History | Annotate | Download | only in X86
      1 ; RUN: llvm-as %s -o %t.o
      2 
      3 ; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
      4 ; RUN:    --plugin-opt=emit-llvm \
      5 ; RUN:    --plugin-opt=generate-api-file \
      6 ; RUN:    -shared %t.o -o %t2.o
      7 ; RUN: llvm-dis %t2.o -o - | FileCheck %s
      8 ; RUN: FileCheck --check-prefix=API %s < %T/../apifile.txt
      9 
     10 ; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
     11 ; RUN:     -m elf_x86_64 --plugin-opt=save-temps \
     12 ; RUN:    -shared %t.o -o %t3.o
     13 ; RUN: llvm-dis %t3.o.bc -o - | FileCheck %s
     14 ; RUN: llvm-dis %t3.o.opt.bc -o - | FileCheck --check-prefix=OPT %s
     15 ; RUN: llvm-dis %t3.o.opt.bc -o - | FileCheck --check-prefix=OPT2 %s
     16 ; RUN: llvm-nm %t3.o.o | FileCheck --check-prefix=NM %s
     17 
     18 ; RUN: rm -f %t4.o
     19 ; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
     20 ; RUN:     -m elf_x86_64 --plugin-opt=disable-output \
     21 ; RUN:    -shared %t.o -o %t4.o
     22 ; RUN: not test -a %t4.o
     23 
     24 ; NM: T f3
     25 
     26 target triple = "x86_64-unknown-linux-gnu"
     27 
     28 @g7 = extern_weak global i32
     29 ; CHECK-DAG: @g7 = extern_weak global i32
     30 
     31 @g8 = external global i32
     32 
     33 ; CHECK-DAG: define internal void @f1()
     34 ; OPT2-NOT: @f1
     35 define hidden void @f1() {
     36   ret void
     37 }
     38 
     39 ; CHECK-DAG: define hidden void @f2()
     40 ; OPT-DAG: define hidden void @f2()
     41 define hidden void @f2() {
     42   ret void
     43 }
     44 
     45 @llvm.used = appending global [1 x i8*] [ i8* bitcast (void ()* @f2 to i8*)]
     46 
     47 ; CHECK-DAG: define void @f3()
     48 ; OPT-DAG: define void @f3()
     49 define void @f3() {
     50   call void @f4()
     51   ret void
     52 }
     53 
     54 ; CHECK-DAG: define internal void @f4()
     55 ; OPT2-NOT: @f4
     56 define linkonce_odr void @f4() {
     57   ret void
     58 }
     59 
     60 ; CHECK-DAG: define linkonce_odr void @f5()
     61 ; OPT-DAG: define linkonce_odr void @f5()
     62 define linkonce_odr void @f5() {
     63   ret void
     64 }
     65 @g5 = global void()* @f5
     66 
     67 ; CHECK-DAG: define internal void @f6() unnamed_addr
     68 ; OPT-DAG: define internal void @f6() unnamed_addr
     69 define linkonce_odr void @f6() unnamed_addr {
     70   ret void
     71 }
     72 @g6 = global void()* @f6
     73 
     74 define i32* @f7() {
     75   ret i32* @g7
     76 }
     77 
     78 define i32* @f8() {
     79   ret i32* @g8
     80 }
     81 
     82 ; API: f1 PREVAILING_DEF_IRONLY
     83 ; API: f2 PREVAILING_DEF_IRONLY
     84 ; API: f3 PREVAILING_DEF_IRONLY_EXP
     85 ; API: f4 PREVAILING_DEF_IRONLY_EXP
     86 ; API: f5 PREVAILING_DEF_IRONLY_EXP
     87 ; API: f6 PREVAILING_DEF_IRONLY_EXP
     88 ; API: f7 PREVAILING_DEF_IRONLY_EXP
     89 ; API: f8 PREVAILING_DEF_IRONLY_EXP
     90 ; API: g7 UNDEF
     91 ; API: g8 UNDEF
     92 ; API: g5 PREVAILING_DEF_IRONLY_EXP
     93 ; API: g6 PREVAILING_DEF_IRONLY_EXP
     94