diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2007-01-17 07:59:14 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2007-01-17 07:59:14 +0000 |
commit | 83b3d8267225d585678d5d3af9bba5735f4b415d (patch) | |
tree | 9d6c2ad7bfd568186e83a39e6f03e1c0bf415715 /llvm/test/CodeGen/Alpha | |
parent | 100602d7561ca5e245db6194bddae86357d203d4 (diff) | |
download | bcm5719-llvm-83b3d8267225d585678d5d3af9bba5735f4b415d.tar.gz bcm5719-llvm-83b3d8267225d585678d5d3af9bba5735f4b415d.zip |
Regression is gone, don't try to find it on clean target.
llvm-svn: 33296
Diffstat (limited to 'llvm/test/CodeGen/Alpha')
32 files changed, 773 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/Alpha/.cvsignore b/llvm/test/CodeGen/Alpha/.cvsignore new file mode 100644 index 00000000000..7f2443f2f31 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/.cvsignore @@ -0,0 +1,3 @@ +Output +*.log +*.sum diff --git a/llvm/test/CodeGen/Alpha/2005-07-12-TwoMallocCalls.ll b/llvm/test/CodeGen/Alpha/2005-07-12-TwoMallocCalls.ll new file mode 100644 index 00000000000..59c65053e52 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/2005-07-12-TwoMallocCalls.ll @@ -0,0 +1,19 @@ +; There should be exactly two calls here (memset and malloc), no more. +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep jsr | wc -l | grep 2 + +%typedef.bc_struct = type opaque + +implementation ; Functions: + +declare void %llvm.memset.i64(sbyte*, ubyte, ulong, uint) + +bool %l12_l94_bc_divide_endif_2E_3_2E_ce(int* %tmp.71.reload, uint %scale2.1.3, uint %extra.0, %typedef.bc_struct* %n1, %typedef.bc_struct* %n2, int* %tmp.92.reload, uint %tmp.94.reload, int* %tmp.98.reload, uint %tmp.100.reload, sbyte** %tmp.112.out, uint* %tmp.157.out, sbyte** %tmp.158.out) { +newFuncRoot: + %tmp.120 = add uint %extra.0, 2 ; <uint> [#uses=1] + %tmp.122 = add uint %tmp.120, %tmp.94.reload ; <uint> [#uses=1] + %tmp.123 = add uint %tmp.122, %tmp.100.reload ; <uint> [#uses=2] + %tmp.112 = malloc sbyte, uint %tmp.123 ; <sbyte*> [#uses=3] + %tmp.137 = cast uint %tmp.123 to ulong ; <ulong> [#uses=1] + tail call void %llvm.memset.i64( sbyte* %tmp.112, ubyte 0, ulong %tmp.137, uint 0 ) + ret bool true +} diff --git a/llvm/test/CodeGen/Alpha/2005-12-12-MissingFCMov.ll b/llvm/test/CodeGen/Alpha/2005-12-12-MissingFCMov.ll new file mode 100644 index 00000000000..5b9fa19422d --- /dev/null +++ b/llvm/test/CodeGen/Alpha/2005-12-12-MissingFCMov.ll @@ -0,0 +1,44 @@ +; This shouldn't crash +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha + +; ModuleID = 'bugpoint-reduced-simplified.bc' +target endian = little +target pointersize = 64 +%.str_4 = external global [44 x sbyte] ; <[44 x sbyte]*> [#uses=0] + +implementation ; Functions: + +declare void %printf(int, ...) + +void %main() { +entry: + %tmp.11861 = setlt long 0, 1 ; <bool> [#uses=1] + %tmp.19466 = setlt long 0, 1 ; <bool> [#uses=1] + %tmp.21571 = setlt long 0, 1 ; <bool> [#uses=1] + %tmp.36796 = setlt long 0, 1 ; <bool> [#uses=1] + br bool %tmp.11861, label %loopexit.2, label %no_exit.2 + +no_exit.2: ; preds = %entry + ret void + +loopexit.2: ; preds = %entry + br bool %tmp.19466, label %loopexit.3, label %no_exit.3.preheader + +no_exit.3.preheader: ; preds = %loopexit.2 + ret void + +loopexit.3: ; preds = %loopexit.2 + br bool %tmp.21571, label %no_exit.6, label %no_exit.4 + +no_exit.4: ; preds = %loopexit.3 + ret void + +no_exit.6: ; preds = %no_exit.6, %loopexit.3 + %tmp.30793 = setgt long 0, 0 ; <bool> [#uses=1] + br bool %tmp.30793, label %loopexit.6, label %no_exit.6 + +loopexit.6: ; preds = %no_exit.6 + %Z.1 = select bool %tmp.36796, double 1.000000e+00, double 0x3FEFFF7CEDE74EAE ; <double> [#uses=2] + tail call void (int, ...)* %printf( int 0, long 0, long 0, long 0, double 1.000000e+00, double 1.000000e+00, double %Z.1, double %Z.1 ) + ret void +} diff --git a/llvm/test/CodeGen/Alpha/2006-01-18-MissedGlobal.ll b/llvm/test/CodeGen/Alpha/2006-01-18-MissedGlobal.ll new file mode 100644 index 00000000000..f0a5c17ddcf --- /dev/null +++ b/llvm/test/CodeGen/Alpha/2006-01-18-MissedGlobal.ll @@ -0,0 +1,30 @@ +; The global symbol should be legalized +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha + +target endian = little +target pointersize = 64 + %struct.LIST_HELP = type { %struct.LIST_HELP*, sbyte* } + %struct._IO_FILE = type { int, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, %struct._IO_marker*, %struct._IO_FILE*, int, int, long, ushort, sbyte, [1 x sbyte], sbyte*, long, sbyte*, sbyte*, int, [44 x sbyte] } + %struct._IO_marker = type { %struct._IO_marker*, %struct._IO_FILE*, int } +%clause_SORT = external global [21 x %struct.LIST_HELP*] ; <[21 x %struct.LIST_HELP*]*> [#uses=1] +%ia_in = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=1] +%multvec_j = external global [100 x uint] ; <[100 x uint]*> [#uses=1] + +implementation ; Functions: + +void %main(int %argc) { +clock_Init.exit: + %tmp.5.i575 = load int* null ; <int> [#uses=1] + %tmp.309 = seteq int %tmp.5.i575, 0 ; <bool> [#uses=1] + br bool %tmp.309, label %UnifiedReturnBlock, label %then.17 + +then.17: ; preds = %clock_Init.exit + store %struct._IO_FILE* null, %struct._IO_FILE** %ia_in + %savedstack = call sbyte* %llvm.stacksave( ) ; <sbyte*> [#uses=0] + ret void + +UnifiedReturnBlock: ; preds = %clock_Init.exit + ret void +} + +declare sbyte* %llvm.stacksave() diff --git a/llvm/test/CodeGen/Alpha/2006-01-26-VaargBreak.ll b/llvm/test/CodeGen/Alpha/2006-01-26-VaargBreak.ll new file mode 100644 index 00000000000..e58152ee80f --- /dev/null +++ b/llvm/test/CodeGen/Alpha/2006-01-26-VaargBreak.ll @@ -0,0 +1,17 @@ +; This shouldn't crash +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha + +; ModuleID = 'simp.bc' +target endian = little +target pointersize = 64 +target triple = "alphaev6-unknown-linux-gnu" +deplibs = [ "c", "crtend", "stdc++" ] + %struct.__va_list_tag = type { sbyte*, int } + +implementation ; Functions: + +uint %emit_library_call_value(int %nargs, ...) { +entry: + %tmp.223 = va_arg %struct.__va_list_tag* null, uint ; <uint> [#uses=0] + ret uint %tmp.223 +} diff --git a/llvm/test/CodeGen/Alpha/2006-04-04-zextload.ll b/llvm/test/CodeGen/Alpha/2006-04-04-zextload.ll new file mode 100644 index 00000000000..75ad7e0c425 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/2006-04-04-zextload.ll @@ -0,0 +1,36 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha + +target endian = little +target pointersize = 64 +target triple = "alphaev67-unknown-linux-gnu" + %llvm.dbg.compile_unit.type = type { uint, { }*, uint, uint, sbyte*, sbyte*, sbyte* } + %struct._Callback_list = type { %struct._Callback_list*, void (uint, %struct.ios_base*, int)*, int, int } + %struct._Impl = type { int, %struct.facet**, ulong, %struct.facet**, sbyte** } + %struct._Words = type { sbyte*, long } + "struct.__codecvt_abstract_base<char,char,__mbstate_t>" = type { %struct.facet } + "struct.basic_streambuf<char,std::char_traits<char> >" = type { int (...)**, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, %struct.locale } + %struct.facet = type { int (...)**, int } + %struct.ios_base = type { int (...)**, long, long, uint, uint, uint, %struct._Callback_list*, %struct._Words, [8 x %struct._Words], int, %struct._Words*, %struct.locale } + %struct.locale = type { %struct._Impl* } + "struct.ostreambuf_iterator<char,std::char_traits<char> >" = type { "struct.basic_streambuf<char,std::char_traits<char> >"*, bool } +%llvm.dbg.compile_unit1047 = external global %llvm.dbg.compile_unit.type ; <%llvm.dbg.compile_unit.type*> [#uses=1] + +implementation ; Functions: + +void %_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES3_S3_RSt8ios_baseccT_() { +entry: + %tmp234 = seteq sbyte 0, 0 ; <bool> [#uses=1] + br bool %tmp234, label %cond_next243, label %cond_true235 + +cond_true235: ; preds = %entry + ret void + +cond_next243: ; preds = %entry + %tmp428 = load long* null ; <long> [#uses=1] + %tmp428 = cast long %tmp428 to uint ; <uint> [#uses=1] + %tmp429 = alloca sbyte, uint %tmp428 ; <sbyte*> [#uses=0] + call void %llvm.dbg.stoppoint( uint 1146, uint 0, { }* cast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit1047 to { }*) ) + unreachable +} + +declare void %llvm.dbg.stoppoint(uint, uint, { }*) diff --git a/llvm/test/CodeGen/Alpha/2006-07-03-ASMFormalLowering.ll b/llvm/test/CodeGen/Alpha/2006-07-03-ASMFormalLowering.ll new file mode 100644 index 00000000000..94cc0d3c671 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/2006-07-03-ASMFormalLowering.ll @@ -0,0 +1,20 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha + +target endian = little +target pointersize = 64 +target triple = "alphaev67-unknown-linux-gnu" + +implementation ; Functions: + +int %_ZN9__gnu_cxx18__exchange_and_addEPVii(int* %__mem, int %__val) { +entry: + %__tmp = alloca int, align 4 ; <int*> [#uses=1] + %tmp3 = call int asm sideeffect "\0A$$Lxadd_0:\0A\09ldl_l $0,$3\0A\09addl $0,$4,$1\0A\09stl_c $1,$2\0A\09beq $1,$$Lxadd_0\0A\09mb", "=&r,==&r,==m,m,r"( int* %__tmp, int* %__mem, int* %__mem, int %__val ) ; <int> [#uses=1] + ret int %tmp3 +} + +void %_ZN9__gnu_cxx12__atomic_addEPVii(int* %__mem, int %__val) { +entry: + %tmp2 = call int asm sideeffect "\0A$$Ladd_1:\0A\09ldl_l $0,$2\0A\09addl $0,$3,$0\0A\09stl_c $0,$1\0A\09beq $0,$$Ladd_1\0A\09mb", "=&r,==m,m,r"( int* %__mem, int* %__mem, int %__val ) ; <int> [#uses=0] + ret void +} diff --git a/llvm/test/CodeGen/Alpha/2006-11-01-vastart.ll b/llvm/test/CodeGen/Alpha/2006-11-01-vastart.ll new file mode 100644 index 00000000000..61d6db9a574 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/2006-11-01-vastart.ll @@ -0,0 +1,18 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha + +target datalayout = "e-p:64:64" +target endian = little +target pointersize = 64 +target triple = "alphaev67-unknown-linux-gnu" + %struct.va_list = type { sbyte*, int, int } + +implementation ; Functions: + +void %yyerror(int, ...) { +entry: + call void %llvm.va_start( %struct.va_list* null ) + ret void +} + +declare void %llvm.va_start(%struct.va_list*) + diff --git a/llvm/test/CodeGen/Alpha/add.ll b/llvm/test/CodeGen/Alpha/add.ll new file mode 100644 index 00000000000..e385dee2196 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/add.ll @@ -0,0 +1,180 @@ +;test all the shifted and signextending adds and subs with and without consts +; +; RUN: llvm-as < %s | llc -march=alpha -o %t.s -f && +; RUN: grep ' addl' %t.s | wc -l | grep 2 && +; RUN: grep ' addq' %t.s | wc -l | grep 2 && +; RUN: grep ' subl' %t.s | wc -l | grep 2 && +; RUN: grep ' subq' %t.s | wc -l | grep 1 && +; +; RUN: grep 'lda $0,-100($16)' %t.s | wc -l | grep 1 && +; RUN: grep 's4addl' %t.s | wc -l | grep 2 && +; RUN: grep 's8addl' %t.s | wc -l | grep 2 && +; RUN: grep 's4addq' %t.s | wc -l | grep 2 && +; RUN: grep 's8addq' %t.s | wc -l | grep 2 && +; +; RUN: grep 's4subl' %t.s | wc -l | grep 2 && +; RUN: grep 's8subl' %t.s | wc -l | grep 2 && +; RUN: grep 's4subq' %t.s | wc -l | grep 2 && +; RUN: grep 's8subq' %t.s | wc -l | grep 2 + +implementation ; Functions: + +define i32 %al(i32 sext %x.s, i32 sext %y.s) sext { +entry: + %tmp.3.s = add i32 %y.s, %x.s ; <i32> [#uses=1] + ret i32 %tmp.3.s +} + +define i32 %ali(i32 sext %x.s) sext { +entry: + %tmp.3.s = add i32 100, %x.s ; <i32> [#uses=1] + ret i32 %tmp.3.s +} + +define i64 %aq(i64 sext %x.s, i64 sext %y.s) sext { +entry: + %tmp.3.s = add i64 %y.s, %x.s ; <i64> [#uses=1] + ret i64 %tmp.3.s +} + +define i64 %aqi(i64 %x.s) { +entry: + %tmp.3.s = add i64 100, %x.s ; <i64> [#uses=1] + ret i64 %tmp.3.s +} + +define i32 %sl(i32 sext %x.s, i32 sext %y.s) sext { +entry: + %tmp.3.s = sub i32 %y.s, %x.s ; <i32> [#uses=1] + ret i32 %tmp.3.s +} + +define i32 %sli(i32 sext %x.s) sext { +entry: + %tmp.3.s = sub i32 %x.s, 100 ; <i32> [#uses=1] + ret i32 %tmp.3.s +} + +define i64 %sq(i64 %x.s, i64 %y.s) { +entry: + %tmp.3.s = sub i64 %y.s, %x.s ; <i64> [#uses=1] + ret i64 %tmp.3.s +} + +define i64 %sqi(i64 %x.s) { +entry: + %tmp.3.s = sub i64 %x.s, 100 ; <i64> [#uses=1] + ret i64 %tmp.3.s +} + +define i32 %a4l(i32 sext %x.s, i32 sext %y.s) sext { +entry: + %tmp.1.s = shl i32 %y.s, i8 2 ; <i32> [#uses=1] + %tmp.3.s = add i32 %tmp.1.s, %x.s ; <i32> [#uses=1] + ret i32 %tmp.3.s +} + +define i32 %a8l(i32 sext %x.s, i32 sext %y.s) sext { +entry: + %tmp.1.s = shl i32 %y.s, i8 3 ; <i32> [#uses=1] + %tmp.3.s = add i32 %tmp.1.s, %x.s ; <i32> [#uses=1] + ret i32 %tmp.3.s +} + +define i64 %a4q(i64 %x.s, i64 %y.s) { +entry: + %tmp.1.s = shl i64 %y.s, i8 2 ; <i64> [#uses=1] + %tmp.3.s = add i64 %tmp.1.s, %x.s ; <i64> [#uses=1] + ret i64 %tmp.3.s +} + +define i64 %a8q(i64 %x.s, i64 %y.s) { +entry: + %tmp.1.s = shl i64 %y.s, i8 3 ; <i64> [#uses=1] + %tmp.3.s = add i64 %tmp.1.s, %x.s ; <i64> [#uses=1] + ret i64 %tmp.3.s +} + +define i32 %a4li(i32 sext %y.s) sext { +entry: + %tmp.1.s = shl i32 %y.s, i8 2 ; <i32> [#uses=1] + %tmp.3.s = add i32 100, %tmp.1.s ; <i32> [#uses=1] + ret i32 %tmp.3.s +} + +define i32 %a8li(i32 sext %y.s) sext { +entry: + %tmp.1.s = shl i32 %y.s, i8 3 ; <i32> [#uses=1] + %tmp.3.s = add i32 100, %tmp.1.s ; <i32> [#uses=1] + ret i32 %tmp.3.s +} + +define i64 %a4qi(i64 %y.s) { +entry: + %tmp.1.s = shl i64 %y.s, i8 2 ; <i64> [#uses=1] + %tmp.3.s = add i64 100, %tmp.1.s ; <i64> [#uses=1] + ret i64 %tmp.3.s +} + +define i64 %a8qi(i64 %y.s) { +entry: + %tmp.1.s = shl i64 %y.s, i8 3 ; <i64> [#uses=1] + %tmp.3.s = add i64 100, %tmp.1.s ; <i64> [#uses=1] + ret i64 %tmp.3.s +} + +define i32 %s4l(i32 sext %x.s, i32 sext %y.s) sext { +entry: + %tmp.1.s = shl i32 %y.s, i8 2 ; <i32> [#uses=1] + %tmp.3.s = sub i32 %tmp.1.s, %x.s ; <i32> [#uses=1] + ret i32 %tmp.3.s +} + +define i32 %s8l(i32 sext %x.s, i32 sext %y.s) sext { +entry: + %tmp.1.s = shl i32 %y.s, i8 3 ; <i32> [#uses=1] + %tmp.3.s = sub i32 %tmp.1.s, %x.s ; <i32> [#uses=1] + ret i32 %tmp.3.s +} + +define i64 %s4q(i64 %x.s, i64 %y.s) { +entry: + %tmp.1.s = shl i64 %y.s, i8 2 ; <i64> [#uses=1] + %tmp.3.s = sub i64 %tmp.1.s, %x.s ; <i64> [#uses=1] + ret i64 %tmp.3.s +} + +define i64 %s8q(i64 %x.s, i64 %y.s) { +entry: + %tmp.1.s = shl i64 %y.s, i8 3 ; <i64> [#uses=1] + %tmp.3.s = sub i64 %tmp.1.s, %x.s ; <i64> [#uses=1] + ret i64 %tmp.3.s +} + +define i32 %s4li(i32 sext %y.s) sext { +entry: + %tmp.1.s = shl i32 %y.s, i8 2 ; <i32> [#uses=1] + %tmp.3.s = sub i32 %tmp.1.s, 100 ; <i32> [#uses=1] + ret i32 %tmp.3.s +} + +define i32 %s8li(i32 sext %y.s) sext { +entry: + %tmp.1.s = shl i32 %y.s, i8 3 ; <i32> [#uses=1] + %tmp.3.s = sub i32 %tmp.1.s, 100 ; <i32> [#uses=1] + ret i32 %tmp.3.s +} + +define i64 %s4qi(i64 %y.s) { +entry: + %tmp.1.s = shl i64 %y.s, i8 2 ; <i64> [#uses=1] + %tmp.3.s = sub i64 %tmp.1.s, 100 ; <i64> [#uses=1] + ret i64 %tmp.3.s +} + +define i64 %s8qi(i64 %y.s) { +entry: + %tmp.1.s = shl i64 %y.s, i8 3 ; <i64> [#uses=1] + %tmp.3.s = sub i64 %tmp.1.s, 100 ; <i64> [#uses=1] + ret i64 %tmp.3.s +} diff --git a/llvm/test/CodeGen/Alpha/bic.ll b/llvm/test/CodeGen/Alpha/bic.ll new file mode 100644 index 00000000000..f4664c82e32 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/bic.ll @@ -0,0 +1,11 @@ +; Make sure this testcase codegens to the bic instruction +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep 'bic' + +implementation ; Functions: + +long %bar(long %x, long %y) { +entry: + %tmp.1 = xor long %x, -1 ; <long> [#uses=1] + %tmp.2 = and long %y, %tmp.1 + ret long %tmp.2 +} diff --git a/llvm/test/CodeGen/Alpha/bsr.ll b/llvm/test/CodeGen/Alpha/bsr.ll new file mode 100644 index 00000000000..1cd68067ef2 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/bsr.ll @@ -0,0 +1,13 @@ +; Make sure this testcase codegens the bsr instruction +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep 'bsr' + +implementation + +internal long %abc(int %x) { + %tmp.2 = add int %x, -1 ; <int> [#uses=1] + %tmp.0 = call long %abc( int %tmp.2 ) ; <long> [#uses=1] + %tmp.5 = add int %x, -2 ; <int> [#uses=1] + %tmp.3 = call long %abc( int %tmp.5 ) ; <long> [#uses=1] + %tmp.6 = add long %tmp.0, %tmp.3 ; <long> [#uses=1] + ret long %tmp.6 +} diff --git a/llvm/test/CodeGen/Alpha/call_adj.ll b/llvm/test/CodeGen/Alpha/call_adj.ll new file mode 100644 index 00000000000..da47c6ca626 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/call_adj.ll @@ -0,0 +1,15 @@ +;All this should do is not crash +;RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha + +target endian = little +target pointersize = 64 +target triple = "alphaev67-unknown-linux-gnu" + +implementation ; Functions: + +void %_ZNSt13basic_filebufIcSt11char_traitsIcEE22_M_convert_to_externalEPcl(uint %f) { +entry: + %tmp49 = alloca sbyte, uint %f ; <sbyte*> [#uses=1] + %tmp = call uint null( sbyte* null, sbyte* null, sbyte* null, sbyte* null, sbyte* null, sbyte* null, sbyte* null) + ret void +} diff --git a/llvm/test/CodeGen/Alpha/cmov.ll b/llvm/test/CodeGen/Alpha/cmov.ll new file mode 100644 index 00000000000..c5f9f63c342 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/cmov.ll @@ -0,0 +1,23 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | not grep cmovlt +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep cmoveq + +long %cmov_lt(long %a, long %c) { +entry: + %tmp.1 = setlt long %c, 0 + %retval = select bool %tmp.1, long %a, long 10 + ret long %retval +} + +long %cmov_const(long %a, long %b, long %c) { +entry: + %tmp.1 = setlt long %a, %b + %retval = select bool %tmp.1, long %c, long 10 + ret long %retval +} + +long %cmov_lt2(long %a, long %c) { +entry: + %tmp.1 = setgt long %c, 0 + %retval = select bool %tmp.1, long 10, long %a + ret long %retval +} diff --git a/llvm/test/CodeGen/Alpha/cmpbge.ll b/llvm/test/CodeGen/Alpha/cmpbge.ll new file mode 100644 index 00000000000..b7b1c09ce06 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/cmpbge.ll @@ -0,0 +1,16 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep cmpbge | wc -l | grep 2 + +bool %test1(ulong %A, ulong %B) { + %C = and ulong %A, 255 + %D = and ulong %B, 255 + %E = setge ulong %C, %D + ret bool %E +} + +bool %test2(ulong %a, ulong %B) { + %A = shl ulong %a, ubyte 1 + %C = and ulong %A, 254 + %D = and ulong %B, 255 + %E = setge ulong %C, %D + ret bool %E +} diff --git a/llvm/test/CodeGen/Alpha/ctlz.ll b/llvm/test/CodeGen/Alpha/ctlz.ll new file mode 100644 index 00000000000..75035f2c260 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/ctlz.ll @@ -0,0 +1,16 @@ +; Make sure this testcase codegens to the ctlz instruction +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha -mcpu=ev67 | grep -i 'ctlz' +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha -mattr=+CIX | grep -i 'ctlz' +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha -mcpu=ev6 | not grep -i 'ctlz' +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha -mcpu=ev56 | not grep -i 'ctlz' +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha -mattr=-CIX | not grep -i 'ctlz' + +declare ubyte %llvm.ctlz(ubyte) + +implementation ; Functions: + +ubyte %bar(ubyte %x) { +entry: + %tmp.1 = call ubyte %llvm.ctlz( ubyte %x ) + ret ubyte %tmp.1 +} diff --git a/llvm/test/CodeGen/Alpha/ctlz_e.ll b/llvm/test/CodeGen/Alpha/ctlz_e.ll new file mode 100644 index 00000000000..d7dab23ea9a --- /dev/null +++ b/llvm/test/CodeGen/Alpha/ctlz_e.ll @@ -0,0 +1,12 @@ +; Make sure this testcase does not use ctpop +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep -i 'ctpop' |wc -l |grep 0 + +declare ulong %llvm.ctlz(ulong) + +implementation ; Functions: + +ulong %bar(ulong %x) { +entry: + %tmp.1 = call ulong %llvm.ctlz( ulong %x ) + ret ulong %tmp.1 +} diff --git a/llvm/test/CodeGen/Alpha/ctpop.ll b/llvm/test/CodeGen/Alpha/ctpop.ll new file mode 100644 index 00000000000..bbd35ffa979 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/ctpop.ll @@ -0,0 +1,17 @@ +; Make sure this testcase codegens to the ctpop instruction +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha -mcpu=ev67 | grep -i 'ctpop' +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha -mattr=+CIX | grep -i 'ctpop' +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha -mcpu=ev6 | not grep -i 'ctpop' +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha -mcpu=ev56 | not grep -i 'ctpop' +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha -mattr=-CIX | not grep -i 'ctpop' + + +declare long %llvm.ctpop(long) + +implementation ; Functions: + +long %bar(long %x) { +entry: + %tmp.1 = call long %llvm.ctpop( long %x ) + ret long %tmp.1 +} diff --git a/llvm/test/CodeGen/Alpha/dg.exp b/llvm/test/CodeGen/Alpha/dg.exp new file mode 100644 index 00000000000..e109dadd008 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/dg.exp @@ -0,0 +1,3 @@ +load_lib llvm-dg.exp + +llvm-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.{ll}]] $objdir $srcdir $subdir $target_triplet $llvmgcc $llvmgxx $prcontext $llvmgcc_version diff --git a/llvm/test/CodeGen/Alpha/eqv.ll b/llvm/test/CodeGen/Alpha/eqv.ll new file mode 100644 index 00000000000..f8e69916471 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/eqv.ll @@ -0,0 +1,11 @@ +; Make sure this testcase codegens to the eqv instruction +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep 'eqv' + +implementation ; Functions: + +long %bar(long %x, long %y) { +entry: + %tmp.1 = xor long %x, -1 ; <long> [#uses=1] + %tmp.2 = xor long %y, %tmp.1 + ret long %tmp.2 +} diff --git a/llvm/test/CodeGen/Alpha/i32_sub_1.ll b/llvm/test/CodeGen/Alpha/i32_sub_1.ll new file mode 100644 index 00000000000..9d8cb097348 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/i32_sub_1.ll @@ -0,0 +1,10 @@ +; Make sure this testcase codegens to the ctpop instruction +; RUN: llvm-as < %s | llc -march=alpha | grep -i 'subl $16,1,$0' + +implementation ; Functions: + +define i32 %foo(i32 sext %x) sext { +entry: + %tmp.1 = add i32 %x, -1 ; <int> [#uses=1] + ret i32 %tmp.1 +} diff --git a/llvm/test/CodeGen/Alpha/jmp_table.ll b/llvm/test/CodeGen/Alpha/jmp_table.ll new file mode 100644 index 00000000000..9c1f27877a6 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/jmp_table.ll @@ -0,0 +1,99 @@ +; try to check that we have the most important instructions, which shouldn't appear otherwise +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep 'jmp' && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep 'gprel32' && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep 'ldl' && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep 'rodata' + +target endian = little +target pointersize = 64 +target triple = "alphaev67-unknown-linux-gnu" +%str = internal constant [2 x sbyte] c"1\00" ; <[2 x sbyte]*> [#uses=1] +%str1 = internal constant [2 x sbyte] c"2\00" ; <[2 x sbyte]*> [#uses=1] +%str2 = internal constant [2 x sbyte] c"3\00" ; <[2 x sbyte]*> [#uses=1] +%str3 = internal constant [2 x sbyte] c"4\00" ; <[2 x sbyte]*> [#uses=1] +%str4 = internal constant [2 x sbyte] c"5\00" ; <[2 x sbyte]*> [#uses=1] +%str5 = internal constant [2 x sbyte] c"6\00" ; <[2 x sbyte]*> [#uses=1] +%str6 = internal constant [2 x sbyte] c"7\00" ; <[2 x sbyte]*> [#uses=1] +%str7 = internal constant [2 x sbyte] c"8\00" ; <[2 x sbyte]*> [#uses=1] + +implementation ; Functions: + +int %main(int %x, sbyte** %y) { +entry: + %x_addr = alloca int ; <int*> [#uses=2] + %y_addr = alloca sbyte** ; <sbyte***> [#uses=1] + %retval = alloca int, align 4 ; <int*> [#uses=2] + %tmp = alloca int, align 4 ; <int*> [#uses=2] + %foo = alloca sbyte*, align 8 ; <sbyte**> [#uses=9] + "alloca point" = cast int 0 to int ; <int> [#uses=0] + store int %x, int* %x_addr + store sbyte** %y, sbyte*** %y_addr + %tmp = load int* %x_addr ; <int> [#uses=1] + switch int %tmp, label %bb15 [ + int 1, label %bb + int 2, label %bb1 + int 3, label %bb3 + int 4, label %bb5 + int 5, label %bb7 + int 6, label %bb9 + int 7, label %bb11 + int 8, label %bb13 + ] + +bb: ; preds = %entry + %tmp = getelementptr [2 x sbyte]* %str, int 0, ulong 0 ; <sbyte*> [#uses=1] + store sbyte* %tmp, sbyte** %foo + br label %bb16 + +bb1: ; preds = %entry + %tmp2 = getelementptr [2 x sbyte]* %str1, int 0, ulong 0 ; <sbyte*> [#uses=1] + store sbyte* %tmp2, sbyte** %foo + br label %bb16 + +bb3: ; preds = %entry + %tmp4 = getelementptr [2 x sbyte]* %str2, int 0, ulong 0 ; <sbyte*> [#uses=1] + store sbyte* %tmp4, sbyte** %foo + br label %bb16 + +bb5: ; preds = %entry + %tmp6 = getelementptr [2 x sbyte]* %str3, int 0, ulong 0 ; <sbyte*> [#uses=1] + store sbyte* %tmp6, sbyte** %foo + br label %bb16 + +bb7: ; preds = %entry + %tmp8 = getelementptr [2 x sbyte]* %str4, int 0, ulong 0 ; <sbyte*> [#uses=1] + store sbyte* %tmp8, sbyte** %foo + br label %bb16 + +bb9: ; preds = %entry + %tmp10 = getelementptr [2 x sbyte]* %str5, int 0, ulong 0 ; <sbyte*> [#uses=1] + store sbyte* %tmp10, sbyte** %foo + br label %bb16 + +bb11: ; preds = %entry + %tmp12 = getelementptr [2 x sbyte]* %str6, int 0, ulong 0 ; <sbyte*> [#uses=1] + store sbyte* %tmp12, sbyte** %foo + br label %bb16 + +bb13: ; preds = %entry + %tmp14 = getelementptr [2 x sbyte]* %str7, int 0, ulong 0 ; <sbyte*> [#uses=1] + store sbyte* %tmp14, sbyte** %foo + br label %bb16 + +bb15: ; preds = %entry + br label %bb16 + +bb16: ; preds = %bb15, %bb13, %bb11, %bb9, %bb7, %bb5, %bb3, %bb1, %bb + %tmp17 = load sbyte** %foo ; <sbyte*> [#uses=1] + %tmp18 = call int (...)* %print( sbyte* %tmp17 ) ; <int> [#uses=0] + store int 0, int* %tmp + %tmp19 = load int* %tmp ; <int> [#uses=1] + store int %tmp19, int* %retval + br label %return + +return: ; preds = %bb16 + %retval = load int* %retval ; <int> [#uses=1] + ret int %retval +} + +declare int %print(...) diff --git a/llvm/test/CodeGen/Alpha/mul5.ll b/llvm/test/CodeGen/Alpha/mul5.ll new file mode 100644 index 00000000000..5e41d0fd856 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/mul5.ll @@ -0,0 +1,50 @@ +; Make sure this testcase does not use mulq +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep -i 'mul' |wc -l |grep 0 + +implementation ; Functions: + +ulong %foo1(ulong %x) { +entry: + %tmp.1 = mul ulong %x, 9 ; <ulong> [#uses=1] + ret ulong %tmp.1 +} +ulong %foo3(ulong %x) { +entry: + %tmp.1 = mul ulong %x, 259 + ret ulong %tmp.1 +} + +ulong %foo4l(ulong %x) { +entry: + %tmp.1 = mul ulong %x, 260 + ret ulong %tmp.1 +} + +ulong %foo4ln(ulong %x) { +entry: + %tmp.1 = mul ulong %x, 508 + ret ulong %tmp.1 +} +ulong %foo4ln_more(ulong %x) { +entry: + %tmp.1 = mul ulong %x, 252 + ret ulong %tmp.1 +} + +ulong %foo1n(ulong %x) { +entry: + %tmp.1 = mul ulong %x, 511 + ret ulong %tmp.1 +} + +ulong %foo8l(ulong %x) { +entry: + %tmp.1 = mul ulong %x, 768 + ret ulong %tmp.1 +} + +long %bar(long %x) { +entry: + %tmp.1 = mul long %x, 5 ; <long> [#uses=1] + ret long %tmp.1 +} diff --git a/llvm/test/CodeGen/Alpha/neg1.ll b/llvm/test/CodeGen/Alpha/neg1.ll new file mode 100644 index 00000000000..e8e50860bbe --- /dev/null +++ b/llvm/test/CodeGen/Alpha/neg1.ll @@ -0,0 +1,9 @@ +; Make sure this testcase codegens to the lda -1 instruction +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep '\-1' + +implementation ; Functions: + +long %bar() { +entry: + ret long -1 +} diff --git a/llvm/test/CodeGen/Alpha/not.ll b/llvm/test/CodeGen/Alpha/not.ll new file mode 100644 index 00000000000..406f6242938 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/not.ll @@ -0,0 +1,10 @@ +; Make sure this testcase codegens to the ornot instruction +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep 'eqv' + +implementation ; Functions: + +long %bar(long %x) { +entry: + %tmp.1 = xor long %x, -1 ; <long> [#uses=1] + ret long %tmp.1 +} diff --git a/llvm/test/CodeGen/Alpha/ornot.ll b/llvm/test/CodeGen/Alpha/ornot.ll new file mode 100644 index 00000000000..fc982b34aa2 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/ornot.ll @@ -0,0 +1,11 @@ +; Make sure this testcase codegens to the ornot instruction +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep 'ornot' + +implementation ; Functions: + +long %bar(long %x, long %y) { +entry: + %tmp.1 = xor long %x, -1 ; <long> [#uses=1] + %tmp.2 = or long %y, %tmp.1 + ret long %tmp.2 +} diff --git a/llvm/test/CodeGen/Alpha/rpcc.ll b/llvm/test/CodeGen/Alpha/rpcc.ll new file mode 100644 index 00000000000..ba143a6fd7f --- /dev/null +++ b/llvm/test/CodeGen/Alpha/rpcc.ll @@ -0,0 +1,10 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep rpcc + +declare ulong %llvm.readcyclecounter() + +ulong %foo() { +entry: +%tmp.1 = call ulong %llvm.readcyclecounter () +ret ulong %tmp.1 +} + diff --git a/llvm/test/CodeGen/Alpha/srl_and.ll b/llvm/test/CodeGen/Alpha/srl_and.ll new file mode 100644 index 00000000000..49074cc9168 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/srl_and.ll @@ -0,0 +1,10 @@ +; Make sure this testcase codegens to the zapnot instruction +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep 'zapnot' + +ulong %foo(ulong %y) { +entry: + %tmp = shr ulong %y, ubyte 3 ; <ulong> [#uses=1] + %tmp2 = and ulong %tmp, 8191 ; <ulong> [#uses=1] + ret ulong %tmp2 +} + diff --git a/llvm/test/CodeGen/Alpha/weak.ll b/llvm/test/CodeGen/Alpha/weak.ll new file mode 100644 index 00000000000..f39360b8fc0 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/weak.ll @@ -0,0 +1,18 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep .weak.*f && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep .weak.*h + +implementation ; Functions: + +weak uint %f() { +entry: + unreachable +} + +void %g() { +entry: + tail call void %h( ) + ret void +} + +declare extern_weak void %h() diff --git a/llvm/test/CodeGen/Alpha/zapnot.ll b/llvm/test/CodeGen/Alpha/zapnot.ll new file mode 100644 index 00000000000..8d1fa111be3 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/zapnot.ll @@ -0,0 +1,10 @@ +; Make sure this testcase codegens to the bic instruction +; RUN: llvm-as < %s | llc -march=alpha | grep 'zapnot' + +implementation ; Functions: + +define i16 %foo(i64 %y) zext { +entry: + %tmp.1 = trunc i64 %y to i16 ; <ushort> [#uses=1] + ret i16 %tmp.1 +} diff --git a/llvm/test/CodeGen/Alpha/zapnot2.ll b/llvm/test/CodeGen/Alpha/zapnot2.ll new file mode 100644 index 00000000000..a84400f5563 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/zapnot2.ll @@ -0,0 +1,10 @@ +; Make sure this testcase codegens to the zapnot instruction +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep 'zapnot' + +implementation ; Functions: + +long %bar(long %x) { +entry: + %tmp.1 = and long %x, 16711935 ; <long> [#uses=1] + ret long %tmp.1 +} diff --git a/llvm/test/CodeGen/Alpha/zapnot3.ll b/llvm/test/CodeGen/Alpha/zapnot3.ll new file mode 100644 index 00000000000..1784c4a1af1 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/zapnot3.ll @@ -0,0 +1,14 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep zapnot | wc -l | grep 2 + +ulong %foo(ulong %y) { + %tmp = and ulong %y, 65535 + %tmp2 = shr ulong %tmp, ubyte 3 + ret ulong %tmp2 +} + +ulong %foo2(ulong %y) { + %tmp = shr ulong %y, ubyte 3 ; <ulong> [#uses=1] + %tmp2 = and ulong %tmp, 8191 ; <ulong> [#uses=1] + ret ulong %tmp2 +} + diff --git a/llvm/test/CodeGen/Alpha/zapnot4.ll b/llvm/test/CodeGen/Alpha/zapnot4.ll new file mode 100644 index 00000000000..b805607bee0 --- /dev/null +++ b/llvm/test/CodeGen/Alpha/zapnot4.ll @@ -0,0 +1,8 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=alpha | grep zapnot + +ulong %foo(ulong %y) { + %tmp = shl ulong %y, ubyte 3 ; <ulong> [#uses=1] + %tmp2 = and ulong %tmp, 65535 ; <ulong> [#uses=1] + ret ulong %tmp2 +} + |