diff options
47 files changed, 953 insertions, 209 deletions
diff --git a/test/CodeGen/ARM/2006-11-10-CycleInDAG.ll b/test/CodeGen/ARM/2006-11-10-CycleInDAG.ll new file mode 100644 index 0000000000..49ebead110 --- /dev/null +++ b/test/CodeGen/ARM/2006-11-10-CycleInDAG.ll @@ -0,0 +1,20 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+v6 + + %struct.layer_data = type { int, [2048 x ubyte], ubyte*, [16 x ubyte], uint, ubyte*, int, int, [64 x int], [64 x int], [64 x int], [64 x int], int, int, int, int, int, int, int, int, int, int, int, int, [12 x [64 x short]] } +%ld = external global %struct.layer_data* + +void %main() { +entry: + br bool false, label %bb169.i, label %cond_true11 + +bb169.i: + ret void + +cond_true11: + %tmp.i32 = load %struct.layer_data** %ld + %tmp3.i35 = getelementptr %struct.layer_data* %tmp.i32, int 0, uint 1, int 2048 + %tmp.i36 = getelementptr %struct.layer_data* %tmp.i32, int 0, uint 2 + store ubyte* %tmp3.i35, ubyte** %tmp.i36 + store ubyte* %tmp3.i35, ubyte** null + ret void +} diff --git a/test/CodeGen/ARM/branch.ll b/test/CodeGen/ARM/branch.ll index 54929ad5df..12dd4a9f1e 100644 --- a/test/CodeGen/ARM/branch.ll +++ b/test/CodeGen/ARM/branch.ll @@ -1,8 +1,8 @@ ; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm && ; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep bne && ; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep bge && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep bcs && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep bcc +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep bhs && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep blo void %f1(int %a, int %b, int* %v) { entry: diff --git a/test/CodeGen/ARM/bx_fold.ll b/test/CodeGen/ARM/bx_fold.ll new file mode 100644 index 0000000000..c088903d37 --- /dev/null +++ b/test/CodeGen/ARM/bx_fold.ll @@ -0,0 +1,25 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | not grep bx + +void %test(int %Ptr, ubyte* %L) { +entry: + br label %bb1 + +bb: + %tmp7 = getelementptr ubyte* %L, uint %indvar + store ubyte 0, ubyte* %tmp7 + %indvar.next = add uint %indvar, 1 + br label %bb1 + +bb1: + %indvar = phi uint [ 0, %entry ], [ %indvar.next, %bb ] + %i.0 = cast uint %indvar to int + %Ptr_addr.0 = sub int %Ptr, %i.0 + %tmp12 = seteq int %i.0, %Ptr + %tmp12.not = xor bool %tmp12, true + %bothcond = and bool %tmp12.not, false + br bool %bothcond, label %bb, label %bb18 + +bb18: + ret void +} diff --git a/test/CodeGen/ARM/call.ll b/test/CodeGen/ARM/call.ll index a4b6b807d6..d75814039f 100644 --- a/test/CodeGen/ARM/call.ll +++ b/test/CodeGen/ARM/call.ll @@ -1,20 +1,17 @@ ; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep bl && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep blx +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep 'mov lr, pc' && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+v5t | grep 'blx' + +%t = weak global int ()* null +declare void %g(int, int, int, int) void %f() { -entry: call void %g( int 1, int 2, int 3, int 4 ) - call fastcc void %h() ret void } -declare void %g(int, int, int, int) -declare fastcc void %h() - -void %g(void (...)* %g) { -entry: - %g_c = cast void (...)* %g to void ()* - call void %g_c( ) +void %g() { + %tmp = load int ()** %t + %tmp = tail call int %tmp( ) ret void } diff --git a/test/CodeGen/ARM/clz.ll b/test/CodeGen/ARM/clz.ll new file mode 100644 index 0000000000..80b7cd8fee --- /dev/null +++ b/test/CodeGen/ARM/clz.ll @@ -0,0 +1,9 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+v5t | grep "clz" + +declare uint %llvm.ctlz.i32(uint) + +uint %test(uint %x) { + %tmp.1 = call uint %llvm.ctlz.i32( uint %x ) + ret uint %tmp.1 +} diff --git a/test/CodeGen/ARM/compare-call.ll b/test/CodeGen/ARM/compare-call.ll new file mode 100644 index 0000000000..0c57e0e1c2 --- /dev/null +++ b/test/CodeGen/ARM/compare-call.ll @@ -0,0 +1,20 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+v6,+vfp2 | grep fcmpes + +void %test3(float* %glob, int %X) { +entry: + %tmp = load float* %glob ; <float> [#uses=1] + %tmp2 = getelementptr float* %glob, int 2 ; <float*> [#uses=1] + %tmp3 = load float* %tmp2 ; <float> [#uses=1] + %tmp = setgt float %tmp, %tmp3 ; <bool> [#uses=1] + br bool %tmp, label %cond_true, label %UnifiedReturnBlock + +cond_true: ; preds = %entry + %tmp = tail call int (...)* %bar( ) ; <int> [#uses=0] + ret void + +UnifiedReturnBlock: ; preds = %entry + ret void +} + +declare int %bar(...) diff --git a/test/CodeGen/ARM/constants.ll b/test/CodeGen/ARM/constants.ll index c499a08209..c8d35188c6 100644 --- a/test/CodeGen/ARM/constants.ll +++ b/test/CodeGen/ARM/constants.ll @@ -1,15 +1,11 @@ -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -o %t.s -f && -; RUN: grep "mov r0, #0" %t.s | wc -l | grep 1 && -; RUN: grep "mov r0, #255" %t.s | wc -l | grep 1 && -; RUN: grep "mov r0, #256" %t.s | wc -l | grep 1 && -; RUN: grep "mov r0, #1" %t.s | wc -l | grep 2 && -; RUN: grep "orr r0, r0, #256" %t.s | wc -l | grep 1 && -; RUN: grep "mov r0, #-1073741761" %t.s | wc -l | grep 1 && -; RUN: grep "mov r0, #1008" %t.s | wc -l | grep 1 && -; RUN: grep "cmp r0, #65536" %t.s | wc -l | grep 1 && -; RUN: grep "\.comm.*a,4,4" %t.s | wc -l | grep 1 - -%a = internal global int 0 +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep "mov r0, #0" | wc -l | grep 1 && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep "mov r0, #255$" | wc -l | grep 1 && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep "mov r0.*256" | wc -l | grep 1 && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep "orr.*256" | wc -l | grep 1 && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep "mov r0, .*-1073741761" | wc -l | grep 1 && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep "mov r0, .*1008" | wc -l | grep 1 && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep "cmp r0, #1, 16" | wc -l | grep 1 uint %f1() { ret uint 0 @@ -36,7 +32,6 @@ uint %f6() { } void %f7(uint %a) { -entry: %b = setgt uint %a, 65536 br bool %b, label %r, label %r diff --git a/test/CodeGen/ARM/ctors_dtors.ll b/test/CodeGen/ARM/ctors_dtors.ll index af15578c39..b4cdf27b3c 100644 --- a/test/CodeGen/ARM/ctors_dtors.ll +++ b/test/CodeGen/ARM/ctors_dtors.ll @@ -1,6 +1,8 @@ -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -o %t.s -f && -; RUN: grep '\.section \.ctors,"aw",.progbits' %t.s | grep % && -; RUN: grep '\.section \.dtors,"aw",.progbits' %t.s | grep % +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm && +; RUN: llvm-upgrade < %s | llvm-as | llc -mtriple=arm-apple-darwin | grep '\.mod_init_func' && +; RUN: llvm-upgrade < %s | llvm-as | llc -mtriple=arm-apple-darwin | grep '\.mod_term_func' && +; RUN: llvm-upgrade < %s | llvm-as | llc -mtriple=arm-linux | grep '\.section \.ctors,"aw",.progbits' && +; RUN: llvm-upgrade < %s | llvm-as | llc -mtriple=arm-linux | grep '\.section \.dtors,"aw",.progbits' %llvm.global_ctors = appending global [1 x { int, void ()* }] [ { int, void ()* } { int 65535, void ()* %__mf_init } ] ; <[1 x { int, void ()* }]*> [#uses=0] %llvm.global_dtors = appending global [1 x { int, void ()* }] [ { int, void ()* } { int 65535, void ()* %__mf_fini } ] ; <[1 x { int, void ()* }]*> [#uses=0] diff --git a/test/CodeGen/ARM/fcopysign.ll b/test/CodeGen/ARM/fcopysign.ll index 66b639e996..12ea32cc4e 100644 --- a/test/CodeGen/ARM/fcopysign.ll +++ b/test/CodeGen/ARM/fcopysign.ll @@ -1,21 +1,19 @@ -; RUN: llvm-as < %s | llc -march=arm +; RUN: llvm-as < fcopysign.ll | llc -march=arm && +; RUN: llvm-as < fcopysign.ll | llc -march=arm | grep bic | wc -l | grep 2 && +; RUN: llvm-as < fcopysign.ll | llc -march=arm -mattr=+v6,+vfp2 && +; RUN: llvm-as < fcopysign.ll | llc -march=arm -mattr=+v6,+vfp2 | grep fneg | wc -l | grep 2 -define csretcc void %__divsc3({ float, float }* %agg.result, float %a, float %b, float %c, float %d) { -entry: - br i1 false, label %bb, label %cond_next375 - -bb: ; preds = %entry - %tmp81 = tail call float %copysignf( float 0x7FF0000000000000, float %c ) ; <float> [#uses=1] - %tmp87 = mul float %tmp81, %b ; <float> [#uses=1] - br label %cond_next375 - -cond_next375: ; preds = %bb, %entry - %y.1 = phi float [ %tmp87, %bb ], [ 0.000000e+00, %entry ] ; <float> [#uses=0] - ret void +define float %test1(float %x, double %y) { + %tmp = fpext float %x to double + %tmp2 = tail call double %copysign( double %tmp, double %y ) + %tmp2 = fptrunc double %tmp2 to float + ret float %tmp2 } -declare float %fabsf(float) - -declare i1 %llvm.isunordered.f32(float, float) +define double %test2(double %x, float %y) { + %tmp = fpext float %y to double + %tmp2 = tail call double %copysign( double %x, double %tmp ) + ret double %tmp2 +} -declare float %copysignf(float, float) +declare double %copysign(double, double) diff --git a/test/CodeGen/ARM/fp.ll b/test/CodeGen/ARM/fp.ll index ef6fde6a1c..15be71637b 100644 --- a/test/CodeGen/ARM/fp.ll +++ b/test/CodeGen/ARM/fp.ll @@ -1,27 +1,48 @@ ; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fmsr && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fmrs && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fmrrd && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fmdrr && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fldd && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep flds && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fstd && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fsts && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep "mov r0, #1065353216" +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fmsr | wc -l | grep 4 && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fsitos && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fmrs && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fsitod && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fmrrd | wc -l | grep 5 && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fmdrr | wc -l | grep 2 && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fldd && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep flds && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fuitod && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fuitos && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep 1065353216 + +float %f(int %a) { +entry: + %tmp = cast int %a to float ; <float> [#uses=1] + ret float %tmp +} +double %g(int %a) { +entry: + %tmp = cast int %a to double ; <double> [#uses=1] + ret double %tmp +} -double %h(double* %v) { +double %uint_to_double(uint %a) { entry: - %tmp = load double* %v ; <double> [#uses=1] + %tmp = cast uint %a to double ret double %tmp } -float %h(float* %v) { +float %uint_to_float(uint %a) { entry: - %tmp = load float* %v ; <double> [#uses=1] + %tmp = cast uint %a to float ret float %tmp } + +double %h(double* %v) { +entry: + %tmp = load double* %v ; <double> [#uses=1] + ret double %tmp +} + float %h() { entry: ret float 1.000000e+00 @@ -40,15 +61,3 @@ entry: declare void %f4(double) declare double %f5() - -void %f6(float %a, float* %b) { -entry: - store float %a, float* %b - ret void -} - -void %f7(double %a, double* %b) { -entry: - store double %a, double* %b - ret void -} diff --git a/test/CodeGen/ARM/fparith.ll b/test/CodeGen/ARM/fparith.ll index 0328cb35ba..1ccf6a5ffc 100644 --- a/test/CodeGen/ARM/fparith.ll +++ b/test/CodeGen/ARM/fparith.ll @@ -1,12 +1,14 @@ ; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fadds && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep faddd && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fmuls && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fmuld && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fnegs && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fnegd && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fdivs && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fdivd +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fadds && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep faddd && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fmuls && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fmuld && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fnegs && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fnegd && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fdivs && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fdivd + float %f1(float %a, float %b) { entry: diff --git a/test/CodeGen/ARM/fpcmp.ll b/test/CodeGen/ARM/fpcmp.ll index 402dc7a1ac..0ec7f168b4 100644 --- a/test/CodeGen/ARM/fpcmp.ll +++ b/test/CodeGen/ARM/fpcmp.ll @@ -1,12 +1,11 @@ -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep movmi && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep moveq && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep movgt && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep movge && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep movls && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep movne && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fcmps && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fcmpd +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep movmi && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep moveq && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep movgt && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep movge && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep movne && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fcmped | wc -l | grep 1 +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fcmpes | wc -l | grep 6 int %f1(float %a) { entry: diff --git a/test/CodeGen/ARM/fpcmp_ueq.ll b/test/CodeGen/ARM/fpcmp_ueq.ll index 0c2d4658a7..186c9f31fb 100644 --- a/test/CodeGen/ARM/fpcmp_ueq.ll +++ b/test/CodeGen/ARM/fpcmp_ueq.ll @@ -1,6 +1,6 @@ ; RUN: llvm-as < %s | llc -march=arm && ; RUN: llvm-as < %s | llc -march=arm | grep moveq && -; RUN: llvm-as < %s | llc -march=arm | grep movvs +; RUN: llvm-as < %s | llc -march=arm -mattr=+vfp2 | grep movvs define i32 %f7(float %a, float %b) { entry: diff --git a/test/CodeGen/ARM/fpconv.ll b/test/CodeGen/ARM/fpconv.ll index 4ac542f0fd..ba3976f354 100644 --- a/test/CodeGen/ARM/fpconv.ll +++ b/test/CodeGen/ARM/fpconv.ll @@ -1,14 +1,14 @@ -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fcvtsd && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fcvtds && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep ftosis && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep ftouis && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep ftosid && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep ftouid && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fsitos && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fsitod && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fuitos && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep fuitod +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fcvtsd && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fcvtds && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep ftosizs && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep ftouizs && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep ftosizd && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep ftouizd && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fsitos && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fsitod && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fuitos && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep fuitod float %f1(double %x) { entry: diff --git a/test/CodeGen/ARM/fpmem.ll b/test/CodeGen/ARM/fpmem.ll index 4f942e8365..151fc99f78 100644 --- a/test/CodeGen/ARM/fpmem.ll +++ b/test/CodeGen/ARM/fpmem.ll @@ -1,7 +1,7 @@ ; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm && ; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep "mov r0, #0" | wc -l | grep 1 && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep "flds.*\[" | wc -l | grep 1 && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep "fsts.*\[" | wc -l | grep 1 +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep "flds.*\[" | wc -l | grep 1 && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+vfp2 | grep "fsts.*\[" | wc -l | grep 1 float %f1(float %a) { entry: diff --git a/test/CodeGen/ARM/hello.ll b/test/CodeGen/ARM/hello.ll index af5fafacc3..abf6b4c040 100644 --- a/test/CodeGen/ARM/hello.ll +++ b/test/CodeGen/ARM/hello.ll @@ -1,12 +1,11 @@ ; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm && -; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep mov | wc -l | grep 1 -%str = internal constant [12 x sbyte] c"Hello World\00" ; <[12 x sbyte]*> [#uses=1] +; RUN: llvm-upgrade < %s | llvm-as | llc -mtriple=arm-linux | grep mov | wc -l | grep 1 && +; RUN: llvm-upgrade < %s | llvm-as | llc -mtriple=arm-apple-darwin | grep mov | wc -l | grep 2 -implementation ; Functions: +%str = internal constant [12 x sbyte] c"Hello World\00" int %main() { -entry: - %tmp = call int %puts( sbyte* getelementptr ([12 x sbyte]* %str, int 0, uint 0) ) ; <int> [#uses=0] + %tmp = call int %puts( sbyte* getelementptr ([12 x sbyte]* %str, int 0, uint 0) ) ret int 0 } diff --git a/test/CodeGen/ARM/imm.ll b/test/CodeGen/ARM/imm.ll new file mode 100644 index 0000000000..0a645d3cac --- /dev/null +++ b/test/CodeGen/ARM/imm.ll @@ -0,0 +1,18 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | not grep CPI + +int %test1(int %A) { + %B = add int %A, -268435441 ; 0xF000000F + ret int %B +} + +int %test2() { + ret int 65533 +} + +int %test3(int %A) { + %B = or int %A, 65533 + ret int %B +} + + diff --git a/test/CodeGen/ARM/inlineasm.ll b/test/CodeGen/ARM/inlineasm.ll new file mode 100644 index 0000000000..a75c7469c0 --- /dev/null +++ b/test/CodeGen/ARM/inlineasm.ll @@ -0,0 +1,15 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+v6 + +uint %test1(uint %tmp54) { + %tmp56 = tail call uint asm "uxtb16 $0,$1", "=r,r"( uint %tmp54 ) + ret uint %tmp56 +} + +void %test2() { + %tmp1 = call long asm "ldmia $1!, {$0, ${0:H}}", "=r,==r,1"( int** null, int* null ) + %tmp1 = cast long %tmp1 to ulong + %tmp2 = shr ulong %tmp1, ubyte 32 + %tmp3 = cast ulong %tmp2 to int + %tmp4 = call int asm "pkhbt $0, $1, $2, lsl #16", "=r,r,r"( int 0, int %tmp3 ) + ret void +} diff --git a/test/CodeGen/ARM/insn-sched1.ll b/test/CodeGen/ARM/insn-sched1.ll new file mode 100644 index 0000000000..1e4135b308 --- /dev/null +++ b/test/CodeGen/ARM/insn-sched1.ll @@ -0,0 +1,11 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+v6 && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm -mattr=+v6 | grep mov | wc -l | grep 2 + +int %test(int %x) { + %tmp = cast int %x to short + %tmp2 = tail call int %f( int 1, short %tmp ) + ret int %tmp2 +} + +declare int %f(int, short) diff --git a/test/CodeGen/ARM/large-stack.ll b/test/CodeGen/ARM/large-stack.ll new file mode 100644 index 0000000000..2516522d04 --- /dev/null +++ b/test/CodeGen/ARM/large-stack.ll @@ -0,0 +1,12 @@ +; RUN: llvm-as < %s | llc -march=arm && +; RUN: llvm-as < %s | llc -march=arm -enable-thumb + +define void %test1() { + %tmp = alloca [ 64 x i32 ] , align 4 + ret void +} + +define void %test2() { + %tmp = alloca [ 4168 x i8 ] , align 4 + ret void +} diff --git a/test/CodeGen/ARM/ldm.ll b/test/CodeGen/ARM/ldm.ll new file mode 100644 index 0000000000..5695eeeda6 --- /dev/null +++ b/test/CodeGen/ARM/ldm.ll @@ -0,0 +1,32 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep "ldmia" | wc -l | grep 2 && +; RUN: llvm-upgrade < %s | llvm-as | llc -march=arm | grep "ldmib" | wc -l | grep 1 && +; RU |