diff options
author | Stephen Hines <srhines@google.com> | 2014-12-01 14:51:49 -0800 |
---|---|---|
committer | Stephen Hines <srhines@google.com> | 2014-12-02 16:08:10 -0800 |
commit | 37ed9c199ca639565f6ce88105f9e39e898d82d0 (patch) | |
tree | 8fb36d3910e3ee4c4e1b7422f4f017108efc52f5 /test/tools/gold | |
parent | d2327b22152ced7bc46dc629fc908959e8a52d03 (diff) | |
download | external_llvm-37ed9c199ca639565f6ce88105f9e39e898d82d0.zip external_llvm-37ed9c199ca639565f6ce88105f9e39e898d82d0.tar.gz external_llvm-37ed9c199ca639565f6ce88105f9e39e898d82d0.tar.bz2 |
Update aosp/master LLVM for rebase to r222494.
Change-Id: Ic787f5e0124df789bd26f3f24680f45e678eef2d
Diffstat (limited to 'test/tools/gold')
25 files changed, 434 insertions, 0 deletions
diff --git a/test/tools/gold/Inputs/alias-1.ll b/test/tools/gold/Inputs/alias-1.ll new file mode 100644 index 0000000..96183aa --- /dev/null +++ b/test/tools/gold/Inputs/alias-1.ll @@ -0,0 +1 @@ +@a = global i32 42 diff --git a/test/tools/gold/Inputs/bcsection.s b/test/tools/gold/Inputs/bcsection.s new file mode 100644 index 0000000..ede1e5c --- /dev/null +++ b/test/tools/gold/Inputs/bcsection.s @@ -0,0 +1,2 @@ +.section .llvmbc +.incbin "bcsection.bc" diff --git a/test/tools/gold/Inputs/comdat.ll b/test/tools/gold/Inputs/comdat.ll new file mode 100644 index 0000000..e9e4704 --- /dev/null +++ b/test/tools/gold/Inputs/comdat.ll @@ -0,0 +1,20 @@ +$c2 = comdat any + +@v1 = weak_odr global i32 41, comdat $c2 +define weak_odr protected i32 @f1(i8* %this) comdat $c2 { +bb20: + store i8* %this, i8** null + br label %bb21 +bb21: + ret i32 41 +} + +@r21 = global i32* @v1 +@r22 = global i32(i8*)* @f1 + +@a21 = alias i32* @v1 +@a22 = alias bitcast (i32* @v1 to i16*) + +@a23 = alias i32(i8*)* @f1 +@a24 = alias bitcast (i32(i8*)* @f1 to i16*) +@a25 = alias i16* @a24 diff --git a/test/tools/gold/Inputs/common.ll b/test/tools/gold/Inputs/common.ll new file mode 100644 index 0000000..46f199e --- /dev/null +++ b/test/tools/gold/Inputs/common.ll @@ -0,0 +1 @@ +@a = common global i16 0, align 4 diff --git a/test/tools/gold/Inputs/invalid.bc b/test/tools/gold/Inputs/invalid.bc Binary files differnew file mode 100644 index 0000000..2e7ca8d --- /dev/null +++ b/test/tools/gold/Inputs/invalid.bc diff --git a/test/tools/gold/Inputs/linker-script.export b/test/tools/gold/Inputs/linker-script.export new file mode 100644 index 0000000..2062a08 --- /dev/null +++ b/test/tools/gold/Inputs/linker-script.export @@ -0,0 +1,5 @@ +{ + global: + f; + local: *; +}; diff --git a/test/tools/gold/Inputs/linkonce-weak.ll b/test/tools/gold/Inputs/linkonce-weak.ll new file mode 100644 index 0000000..f42af8f --- /dev/null +++ b/test/tools/gold/Inputs/linkonce-weak.ll @@ -0,0 +1,3 @@ +define weak_odr void @f() { + ret void +} diff --git a/test/tools/gold/Inputs/pr19901-1.ll b/test/tools/gold/Inputs/pr19901-1.ll new file mode 100644 index 0000000..2f71532 --- /dev/null +++ b/test/tools/gold/Inputs/pr19901-1.ll @@ -0,0 +1,4 @@ +target triple = "x86_64-unknown-linux-gnu" +define linkonce_odr hidden void @f() { + ret void +} diff --git a/test/tools/gold/Inputs/weak.ll b/test/tools/gold/Inputs/weak.ll new file mode 100644 index 0000000..53b1d16 --- /dev/null +++ b/test/tools/gold/Inputs/weak.ll @@ -0,0 +1,2 @@ +@a = weak global i32 41 +@c = global i32* @a diff --git a/test/tools/gold/alias.ll b/test/tools/gold/alias.ll new file mode 100644 index 0000000..dbf3af5 --- /dev/null +++ b/test/tools/gold/alias.ll @@ -0,0 +1,13 @@ +; RUN: llvm-as %s -o %t.o +; RUN: llvm-as %p/Inputs/alias-1.ll -o %t2.o +; RUN: ld -shared -o %t3.o -plugin %llvmshlibdir/LLVMgold.so %t2.o %t.o \ +; RUN: -plugin-opt=emit-llvm +; RUN: llvm-dis < %t3.o -o - | FileCheck %s + +; CHECK-NOT: alias +; CHECK: @a = global i32 42 +; CHECK-NEXT: @b = global i32 1 +; CHECK-NOT: alias + +@a = weak alias i32* @b +@b = global i32 1 diff --git a/test/tools/gold/bad-alias.ll b/test/tools/gold/bad-alias.ll new file mode 100644 index 0000000..e0fc788 --- /dev/null +++ b/test/tools/gold/bad-alias.ll @@ -0,0 +1,13 @@ +; RUN: llvm-as %s -o %t.o + +; RUN: not ld -plugin %llvmshlibdir/LLVMgold.so \ +; RUN: --plugin-opt=emit-llvm \ +; RUN: -shared %t.o -o %t2.o 2>&1 | FileCheck %s + +; CHECK: Unable to determine comdat of alias! + +@g1 = global i32 1 +@g2 = global i32 2 + +@a = alias inttoptr(i32 sub (i32 ptrtoint (i32* @g1 to i32), + i32 ptrtoint (i32* @g2 to i32)) to i32*) diff --git a/test/tools/gold/bcsection.ll b/test/tools/gold/bcsection.ll new file mode 100644 index 0000000..8565d9d --- /dev/null +++ b/test/tools/gold/bcsection.ll @@ -0,0 +1,11 @@ +; RUN: llvm-as -o %T/bcsection.bc %s + +; RUN: llvm-mc -I=%T -filetype=obj -o %T/bcsection.bco %p/Inputs/bcsection.s +; RUN: llvm-nm -no-llvm-bc %T/bcsection.bco | count 0 +; RUN: ld -r -o %T/bcsection.o -plugin %llvmshlibdir/LLVMgold.so %T/bcsection.bco +; RUN: llvm-nm -no-llvm-bc %T/bcsection.o | FileCheck %s + +; CHECK: main +define i32 @main() { + ret i32 0 +} diff --git a/test/tools/gold/comdat.ll b/test/tools/gold/comdat.ll new file mode 100644 index 0000000..ba3abce --- /dev/null +++ b/test/tools/gold/comdat.ll @@ -0,0 +1,65 @@ +; RUN: llvm-as %s -o %t.o +; RUN: llvm-as %p/Inputs/comdat.ll -o %t2.o +; RUN: ld -shared -o %t3.o -plugin %llvmshlibdir/LLVMgold.so %t.o %t2.o \ +; RUN: -plugin-opt=emit-llvm +; RUN: llvm-dis %t3.o -o - | FileCheck %s + +$c1 = comdat any + +@v1 = weak_odr global i32 42, comdat $c1 +define weak_odr i32 @f1(i8*) comdat $c1 { +bb10: + br label %bb11 +bb11: + ret i32 42 +} + +@r11 = global i32* @v1 +@r12 = global i32 (i8*)* @f1 + +@a11 = alias i32* @v1 +@a12 = alias bitcast (i32* @v1 to i16*) + +@a13 = alias i32 (i8*)* @f1 +@a14 = alias bitcast (i32 (i8*)* @f1 to i16*) +@a15 = alias i16* @a14 + +; CHECK: $c1 = comdat any +; CHECK: $c2 = comdat any + +; CHECK: @v1 = weak_odr global i32 42, comdat $c1 + +; CHECK: @r11 = global i32* @v1{{$}} +; CHECK: @r12 = global i32 (i8*)* @f1{{$}} + +; CHECK: @r21 = global i32* @v1{{$}} +; CHECK: @r22 = global i32 (i8*)* @f1{{$}} + +; CHECK: @v11 = internal global i32 41, comdat $c2 + +; CHECK: @a11 = alias i32* @v1{{$}} +; CHECK: @a12 = alias bitcast (i32* @v1 to i16*) + +; CHECK: @a13 = alias i32 (i8*)* @f1{{$}} +; CHECK: @a14 = alias bitcast (i32 (i8*)* @f1 to i16*) + +; CHECK: @a21 = alias i32* @v11{{$}} +; CHECK: @a22 = alias bitcast (i32* @v11 to i16*) + +; CHECK: @a23 = alias i32 (i8*)* @f12{{$}} +; CHECK: @a24 = alias bitcast (i32 (i8*)* @f12 to i16*) + +; CHECK: define weak_odr protected i32 @f1(i8*) comdat $c1 { +; CHECK-NEXT: bb10: +; CHECK-NEXT: br label %bb11{{$}} +; CHECK: bb11: +; CHECK-NEXT: ret i32 42 +; CHECK-NEXT: } + +; CHECK: define internal i32 @f12(i8* %this) comdat $c2 { +; CHECK-NEXT: bb20: +; CHECK-NEXT: store i8* %this, i8** null +; CHECK-NEXT: br label %bb21 +; CHECK: bb21: +; CHECK-NEXT: ret i32 41 +; CHECK-NEXT: } diff --git a/test/tools/gold/common.ll b/test/tools/gold/common.ll new file mode 100644 index 0000000..f309231 --- /dev/null +++ b/test/tools/gold/common.ll @@ -0,0 +1,29 @@ +; RUN: llvm-as %s -o %t1.o +; RUN: llvm-as %p/Inputs/common.ll -o %t2.o + +; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \ +; RUN: --plugin-opt=emit-llvm \ +; RUN: -shared %t1.o %t2.o -o %t3.o +; RUN: llvm-dis %t3.o -o - | FileCheck %s + +@a = common global i8 0, align 8 + +; Shared library case, we merge @a as common and keep it for the symbol table. +; CHECK: @a = common global i16 0, align 8 + +; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \ +; RUN: --plugin-opt=emit-llvm \ +; RUN: %t1.o %t2.o -o %t3.o +; RUN: llvm-dis %t3.o -o - | FileCheck --check-prefix=EXEC %s + +; All IR case, we internalize a after merging. +; EXEC: @a = internal global i16 0, align 8 + +; RUN: llc %p/Inputs/common.ll -o %t2.o -filetype=obj +; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \ +; RUN: --plugin-opt=emit-llvm \ +; RUN: %t1.o %t2.o -o %t3.o +; RUN: llvm-dis %t3.o -o - | FileCheck --check-prefix=MIXED %s + +; Mixed ELF and IR. We keep ours as common so the linker will finish the merge. +; MIXED: @a = common global i8 0, align 8 diff --git a/test/tools/gold/emit-llvm.ll b/test/tools/gold/emit-llvm.ll new file mode 100644 index 0000000..0a6dcfc --- /dev/null +++ b/test/tools/gold/emit-llvm.ll @@ -0,0 +1,67 @@ +; RUN: llvm-as %s -o %t.o + +; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \ +; RUN: --plugin-opt=emit-llvm \ +; RUN: --plugin-opt=generate-api-file \ +; RUN: -shared %t.o -o %t2.o +; RUN: llvm-dis %t2.o -o - | FileCheck %s +; RUN: FileCheck --check-prefix=API %s < %T/../apifile.txt + +; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \ +; RUN: -m elf_x86_64 --plugin-opt=save-temps \ +; RUN: -shared %t.o -o %t3.o +; RUN: llvm-dis %t3.o.bc -o - | FileCheck %s +; RUN: llvm-dis %t3.o.opt.bc -o - | FileCheck --check-prefix=OPT %s + +target triple = "x86_64-unknown-linux-gnu" + +; CHECK: define internal void @f1() +; OPT-NOT: @f1 +define hidden void @f1() { + ret void +} + +; CHECK: define hidden void @f2() +; OPT: define hidden void @f2() +define hidden void @f2() { + ret void +} + +@llvm.used = appending global [1 x i8*] [ i8* bitcast (void ()* @f2 to i8*)] + +; CHECK: define void @f3() +; OPT: define void @f3() +define void @f3() { + call void @f4() + ret void +} + +; CHECK: define internal void @f4() +; OPT-NOT: @f4 +define linkonce_odr void @f4() { + ret void +} + +; CHECK: define linkonce_odr void @f5() +; OPT: define linkonce_odr void @f5() +define linkonce_odr void @f5() { + ret void +} +@g5 = global void()* @f5 + +; CHECK: define internal void @f6() unnamed_addr +; OPT: define internal void @f6() unnamed_addr +define linkonce_odr void @f6() unnamed_addr { + ret void +} +@g6 = global void()* @f6 + + +; API: f1 PREVAILING_DEF_IRONLY +; API: f2 PREVAILING_DEF_IRONLY +; API: f3 PREVAILING_DEF_IRONLY_EXP +; API: f4 PREVAILING_DEF_IRONLY_EXP +; API: f5 PREVAILING_DEF_IRONLY_EXP +; API: f6 PREVAILING_DEF_IRONLY_EXP +; API: g5 PREVAILING_DEF_IRONLY_EXP +; API: g6 PREVAILING_DEF_IRONLY_EXP diff --git a/test/tools/gold/invalid.ll b/test/tools/gold/invalid.ll new file mode 100644 index 0000000..8db7644 --- /dev/null +++ b/test/tools/gold/invalid.ll @@ -0,0 +1,7 @@ +; RUN: not ld -plugin %llvmshlibdir/LLVMgold.so \ +; RUN: %p/Inputs/invalid.bc -o %t2 2>&1 | FileCheck %s + +; test that only one error gets printed + +; CHECK: error: LLVM gold plugin has failed to create LTO module: Malformed block +; CHECK-NOT: error diff --git a/test/tools/gold/linker-script.ll b/test/tools/gold/linker-script.ll new file mode 100644 index 0000000..35a7694 --- /dev/null +++ b/test/tools/gold/linker-script.ll @@ -0,0 +1,17 @@ +; RUN: llvm-as %s -o %t.o + +; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \ +; RUN: --plugin-opt=emit-llvm \ +; RUN: -shared %t.o -o %t2.o \ +; RUN: -version-script=%p/Inputs/linker-script.export +; RUN: llvm-dis %t2.o -o - | FileCheck %s + +; CHECK: define void @f() +define void @f() { + ret void +} + +; CHECK: define internal void @g() +define void @g() { + ret void +} diff --git a/test/tools/gold/linkonce-weak.ll b/test/tools/gold/linkonce-weak.ll new file mode 100644 index 0000000..765275b --- /dev/null +++ b/test/tools/gold/linkonce-weak.ll @@ -0,0 +1,19 @@ +; RUN: llvm-as %s -o %t.o +; RUN: llvm-as %p/Inputs/linkonce-weak.ll -o %t2.o + +; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \ +; RUN: --plugin-opt=emit-llvm \ +; RUN: -shared %t.o %t2.o -o %t3.o +; RUN: llvm-dis %t3.o -o - | FileCheck %s + +; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \ +; RUN: --plugin-opt=emit-llvm \ +; RUN: -shared %t2.o %t.o -o %t3.o +; RUN: llvm-dis %t3.o -o - | FileCheck %s + +define linkonce_odr void @f() { + ret void +} + +; Test that we get a weak_odr regardless of the order of the files +; CHECK: define weak_odr void @f() { diff --git a/test/tools/gold/lit.local.cfg b/test/tools/gold/lit.local.cfg new file mode 100644 index 0000000..a59549d --- /dev/null +++ b/test/tools/gold/lit.local.cfg @@ -0,0 +1,4 @@ +if (not 'ld_plugin' in config.available_features or + not 'X86' in config.root.targets or + not 'PowerPC' in config.root.targets): + config.unsupported = True diff --git a/test/tools/gold/mtriple.ll b/test/tools/gold/mtriple.ll new file mode 100644 index 0000000..6395af6 --- /dev/null +++ b/test/tools/gold/mtriple.ll @@ -0,0 +1,13 @@ +; RUN: llvm-as %s -o %t.o +; RUN: ld -plugin %llvmshlibdir/LLVMgold.so -m elf32ppc \ +; RUN: -plugin-opt=mtriple=powerpc-linux-gnu \ +; RUN: -plugin-opt=obj-path=%t3.o \ +; RUN: -shared %t.o -o %t2 +; RUN: llvm-readobj --file-headers %t2 | FileCheck --check-prefix=DSO %s +; RUN: llvm-readobj --file-headers %t3.o | FileCheck --check-prefix=REL %s + +; REL: Type: Relocatable +; REL-NEXT: Machine: EM_PPC + +; DSO: Type: SharedObject +; DSO-NEXT: Machine: EM_PPC diff --git a/test/tools/gold/option.ll b/test/tools/gold/option.ll new file mode 100644 index 0000000..8154e43 --- /dev/null +++ b/test/tools/gold/option.ll @@ -0,0 +1,39 @@ +; RUN: llvm-as %s -o %t.o +; RUN: ld -plugin %llvmshlibdir/LLVMgold.so -m elf_x86_64 \ +; RUN: --plugin-opt=-jump-table-type=arity \ +; RUN: --plugin-opt=-mattr=+aes \ +; RUN: --plugin-opt=mcpu=core-avx2 \ +; RUN: -shared %t.o -o %t2.o +; RUN: llvm-nm %t2.o | FileCheck %s + +; CHECK: t __llvm_jump_instr_table_0_1 +; CHECK: t __llvm_jump_instr_table_1_1 + +target triple = "x86_64-unknown-linux-gnu" +define i32 @g(i32 %a) unnamed_addr jumptable { + ret i32 %a +} + +define i32 (i32)* @get_g() { + ret i32 (i32)* @g +} + +define i32 @f() unnamed_addr jumptable { + ret i32 0 +} + +define i32 ()* @get_f() { + ret i32 ()* @f +} + +define <2 x i64> @test_aes(<2 x i64> %a0, <2 x i64> %a1) { + %res = call <2 x i64> @llvm.x86.aesni.aesenc(<2 x i64> %a0, <2 x i64> %a1) + ret <2 x i64> %res +} +declare <2 x i64> @llvm.x86.aesni.aesenc(<2 x i64>, <2 x i64>) nounwind readnone + +define <32 x i8> @test_avx2(<16 x i16> %a0, <16 x i16> %a1) { + %res = call <32 x i8> @llvm.x86.avx2.packuswb(<16 x i16> %a0, <16 x i16> %a1) + ret <32 x i8> %res +} +declare <32 x i8> @llvm.x86.avx2.packuswb(<16 x i16>, <16 x i16>) nounwind readnone diff --git a/test/tools/gold/pr19901.ll b/test/tools/gold/pr19901.ll new file mode 100644 index 0000000..304246b --- /dev/null +++ b/test/tools/gold/pr19901.ll @@ -0,0 +1,23 @@ +; RUN: llc %s -o %t.o -filetype=obj -relocation-model=pic +; RUN: llvm-as %p/Inputs/pr19901-1.ll -o %t2.o +; RUN: ld -shared -o %t.so -plugin %llvmshlibdir/LLVMgold.so %t2.o %t.o +; RUN: llvm-readobj -t %t.so | FileCheck %s + +; CHECK: Symbol { +; CHECK: Name: f +; CHECK-NEXT: Value: +; CHECK-NEXT: Size: +; CHECK-NEXT: Binding: Local +; CHECK-NEXT: Type: Function +; CHECK-NEXT: Other: 2 +; CHECK-NEXT: Section: .text +; CHECK-NEXT: } + +target triple = "x86_64-unknown-linux-gnu" +define i32 @g() { + call void @f() + ret i32 0 +} +define linkonce_odr hidden void @f() { + ret void +} diff --git a/test/tools/gold/slp-vectorize.ll b/test/tools/gold/slp-vectorize.ll new file mode 100644 index 0000000..d378902 --- /dev/null +++ b/test/tools/gold/slp-vectorize.ll @@ -0,0 +1,30 @@ +; RUN: llvm-as %s -o %t.o + +; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \ +; RUN: --plugin-opt=save-temps \ +; RUN: -shared %t.o -o %t2.o +; RUN: llvm-dis %t2.o.opt.bc -o - | FileCheck %s + +; test that the vectorizer is run. +; CHECK: fadd <4 x float> + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" + +define void @f(float* nocapture %x) { + %tmp = load float* %x, align 4 + %add = fadd float %tmp, 1.000000e+00 + store float %add, float* %x, align 4 + %arrayidx1 = getelementptr inbounds float* %x, i64 1 + %tmp1 = load float* %arrayidx1, align 4 + %add2 = fadd float %tmp1, 1.000000e+00 + store float %add2, float* %arrayidx1, align 4 + %arrayidx3 = getelementptr inbounds float* %x, i64 2 + %tmp2 = load float* %arrayidx3, align 4 + %add4 = fadd float %tmp2, 1.000000e+00 + store float %add4, float* %arrayidx3, align 4 + %arrayidx5 = getelementptr inbounds float* %x, i64 3 + %tmp3 = load float* %arrayidx5, align 4 + %add6 = fadd float %tmp3, 1.000000e+00 + store float %add6, float* %arrayidx5, align 4 + ret void +} diff --git a/test/tools/gold/vectorize.ll b/test/tools/gold/vectorize.ll new file mode 100644 index 0000000..3d305db --- /dev/null +++ b/test/tools/gold/vectorize.ll @@ -0,0 +1,30 @@ +; RUN: llvm-as %s -o %t.o + +; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \ +; RUN: --plugin-opt=save-temps \ +; RUN: -shared %t.o -o %t2.o +; RUN: llvm-dis %t2.o.opt.bc -o - | FileCheck %s + +; test that the vectorizer is run. +; CHECK: fadd <4 x float> + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +define void @f(float* nocapture %x, i64 %n) { +bb: + br label %bb1 + +bb1: + %i.0 = phi i64 [ 0, %bb ], [ %tmp4, %bb1 ] + %tmp = getelementptr inbounds float* %x, i64 %i.0 + %tmp2 = load float* %tmp, align 4 + %tmp3 = fadd float %tmp2, 1.000000e+00 + store float %tmp3, float* %tmp, align 4 + %tmp4 = add nsw i64 %i.0, 1 + %tmp5 = icmp slt i64 %tmp4, %n + br i1 %tmp5, label %bb1, label %bb6 + +bb6: + ret void +} diff --git a/test/tools/gold/weak.ll b/test/tools/gold/weak.ll new file mode 100644 index 0000000..e05e905 --- /dev/null +++ b/test/tools/gold/weak.ll @@ -0,0 +1,16 @@ +; RUN: llvm-as %s -o %t.o +; RUN: llvm-as %p/Inputs/weak.ll -o %t2.o + +; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \ +; RUN: --plugin-opt=emit-llvm \ +; RUN: -shared %t.o %t2.o -o %t3.o +; RUN: llvm-dis %t3.o -o - | FileCheck %s + +@a = weak global i32 42 +@b = global i32* @a + +; Test that @b and @c end up pointing to the same variable. + +; CHECK: @a = weak global i32 42 +; CHECK: @b = global i32* @a{{$}} +; CHECK: @c = global i32* @a{{$}} |