diff options
Diffstat (limited to 'test')
123 files changed, 2148 insertions, 94 deletions
diff --git a/test/Analysis/ScalarEvolution/trip-count6.ll b/test/Analysis/ScalarEvolution/trip-count6.ll new file mode 100644 index 0000000000000..a6674092e7995 --- /dev/null +++ b/test/Analysis/ScalarEvolution/trip-count6.ll @@ -0,0 +1,37 @@ +; RUN: llvm-as < %s | opt -analyze -disable-output -scalar-evolution \ +; RUN:  | grep {max backedge-taken count is 1\$} + +@mode_table = global [4 x i32] zeroinitializer          ; <[4 x i32]*> [#uses=1] + +define i8 @f() { +entry: +  tail call i32 @fegetround( )          ; <i32>:0 [#uses=1] +  br label %bb + +bb:             ; preds = %bb4, %entry +  %mode.0 = phi i8 [ 0, %entry ], [ %indvar.next, %bb4 ]                ; <i8> [#uses=4] +  zext i8 %mode.0 to i32                ; <i32>:1 [#uses=1] +  getelementptr [4 x i32]* @mode_table, i32 0, i32 %1           ; <i32*>:2 [#uses=1] +  load i32* %2, align 4         ; <i32>:3 [#uses=1] +  icmp eq i32 %3, %0            ; <i1>:4 [#uses=1] +  br i1 %4, label %bb1, label %bb2 + +bb1:            ; preds = %bb +  ret i8 %mode.0 + +bb2:            ; preds = %bb +  icmp eq i8 %mode.0, 1         ; <i1>:5 [#uses=1] +  br i1 %5, label %bb5, label %bb4 + +bb4:            ; preds = %bb2 +  %indvar.next = add i8 %mode.0, 1              ; <i8> [#uses=1] +  br label %bb + +bb5:            ; preds = %bb2 +  tail call void @raise_exception( ) noreturn  +  unreachable +} + +declare i32 @fegetround() + +declare void @raise_exception() noreturn  diff --git a/test/CodeGen/ARM/bic.ll b/test/CodeGen/ARM/bic.ll new file mode 100644 index 0000000000000..b4ea433c40cc0 --- /dev/null +++ b/test/CodeGen/ARM/bic.ll @@ -0,0 +1,13 @@ +; RUN: llvm-as < %s | llc -march=arm | grep {bic\\W*r\[0-9\]*,\\W*r\[0-9\]*,\\W*r\[0-9\]*} | count 2 + +define i32 @f1(i32 %a, i32 %b) { +    %tmp = xor i32 %b, 4294967295 +    %tmp1 = and i32 %a, %tmp +    ret i32 %tmp1 +} + +define i32 @f2(i32 %a, i32 %b) { +    %tmp = xor i32 %b, 4294967295 +    %tmp1 = and i32 %tmp, %a +    ret i32 %tmp1 +} diff --git a/test/CodeGen/ARM/carry.ll b/test/CodeGen/ARM/carry.ll new file mode 100644 index 0000000000000..3bf2dc0b4f03a --- /dev/null +++ b/test/CodeGen/ARM/carry.ll @@ -0,0 +1,16 @@ +; RUN: llvm-as < %s | llc -march=arm | grep "subs r" | count 2 +; RUN: llvm-as < %s | llc -march=arm | grep "adc r" +; RUN: llvm-as < %s | llc -march=arm | grep "sbc r"  | count 2 + +define i64 @f1(i64 %a, i64 %b) { +entry: +	%tmp = sub i64 %a, %b +	ret i64 %tmp +} + +define i64 @f2(i64 %a, i64 %b) { +entry: +        %tmp1 = shl i64 %a, 1 +	%tmp2 = sub i64 %tmp1, %b +	ret i64 %tmp2 +} diff --git a/test/CodeGen/ARM/dyn-stackalloc.ll b/test/CodeGen/ARM/dyn-stackalloc.ll index 602fd9bd550ab..e0cd4e15f4e3e 100644 --- a/test/CodeGen/ARM/dyn-stackalloc.ll +++ b/test/CodeGen/ARM/dyn-stackalloc.ll @@ -1,8 +1,4 @@  ; RUN: llvm-as < %s | llc -march=arm -; RUN: llvm-as < %s | llc -march=thumb | not grep {ldr sp} -; RUN: llvm-as < %s | llc -mtriple=thumb-apple-darwin | \ -; RUN:   not grep {sub.*r7} -; RUN: llvm-as < %s | llc -march=thumb | grep 4294967280  	%struct.state = type { i32, %struct.info*, float**, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i64, i64, i64, i64, i8* }  	%struct.info = type { i32, i32, i32, i32, i32, i32, i32, i8* } diff --git a/test/CodeGen/ARM/fpconv.ll b/test/CodeGen/ARM/fpconv.ll index 23850075d0dc9..218b25f9c1b1b 100644 --- a/test/CodeGen/ARM/fpconv.ll +++ b/test/CodeGen/ARM/fpconv.ll @@ -20,7 +20,6 @@  ; RUN: grep floatsidf %t  ; RUN: grep floatunsisf %t  ; RUN: grep floatunsidf %t -; RUN: llvm-as < %s | llc -march=thumb  define float @f1(double %x) {  entry: diff --git a/test/CodeGen/ARM/fpow.ll b/test/CodeGen/ARM/fpow.ll index 155763c9847ae..461a2c966ec49 100644 --- a/test/CodeGen/ARM/fpow.ll +++ b/test/CodeGen/ARM/fpow.ll @@ -1,5 +1,4 @@  ; RUN: llvm-as < %s | llc -march=arm -; RUN: llvm-as < %s | llc -march=thumb  define double @t(double %x, double %y) nounwind optsize {  entry: diff --git a/test/CodeGen/ARM/frame_thumb.ll b/test/CodeGen/ARM/frame_thumb.ll deleted file mode 100644 index fe82db9921296..0000000000000 --- a/test/CodeGen/ARM/frame_thumb.ll +++ /dev/null @@ -1,9 +0,0 @@ -; RUN: llvm-as < %s | llc -march=thumb -mtriple=arm-apple-darwin \ -; RUN:     -disable-fp-elim | not grep {r11} -; RUN: llvm-as < %s | llc -march=thumb -mtriple=arm-linux-gnueabi \ -; RUN:     -disable-fp-elim | not grep {r11} - -define i32 @f() { -entry: -	ret i32 10 -} diff --git a/test/CodeGen/ARM/iabs.ll b/test/CodeGen/ARM/iabs.ll index f10591f41f765..ede6d74553309 100644 --- a/test/CodeGen/ARM/iabs.ll +++ b/test/CodeGen/ARM/iabs.ll @@ -1,17 +1,10 @@  ; RUN: llvm-as < %s | llc -march=arm -stats |& \  ; RUN:   grep {3 .*Number of machine instrs printed} -; RUN: llvm-as < %s | llc -march=thumb -stats |& \ -; RUN:   grep {4 .*Number of machine instrs printed}  ;; Integer absolute value, should produce something as good as: ARM:  ;;   add r3, r0, r0, asr #31  ;;   eor r0, r3, r0, asr #31  ;;   bx lr -;; Thumb: -;;   asr r2, r0, #31 -;;   add r0, r0, r2 -;;   eor r0, r2 -;;   bx lr  define i32 @test(i32 %a) {          %tmp1neg = sub i32 0, %a diff --git a/test/CodeGen/ARM/ispositive.ll b/test/CodeGen/ARM/ispositive.ll index 8dcac30fac8be..7e8eb42b690fe 100644 --- a/test/CodeGen/ARM/ispositive.ll +++ b/test/CodeGen/ARM/ispositive.ll @@ -1,5 +1,4 @@  ; RUN: llvm-as < %s | llc -march=arm | grep {mov r0, r0, lsr #31} -; RUN: llvm-as < %s | llc -march=thumb | grep {lsr r0, r0, #31}  define i32 @test1(i32 %X) {  entry: diff --git a/test/CodeGen/ARM/large-stack.ll b/test/CodeGen/ARM/large-stack.ll index 42d7d0972dca8..b1738a4a38a69 100644 --- a/test/CodeGen/ARM/large-stack.ll +++ b/test/CodeGen/ARM/large-stack.ll @@ -1,5 +1,4 @@  ; RUN: llvm-as < %s | llc -march=arm -; RUN: llvm-as < %s | llc -march=thumb | grep {ldr.*LCP} | count 5  define void @test1() {      %tmp = alloca [ 64 x i32 ] , align 4 diff --git a/test/CodeGen/ARM/ldr_ext.ll b/test/CodeGen/ARM/ldr_ext.ll index edb70d5396dfd..b99c72197740e 100644 --- a/test/CodeGen/ARM/ldr_ext.ll +++ b/test/CodeGen/ARM/ldr_ext.ll @@ -2,10 +2,6 @@  ; RUN: llvm-as < %s | llc -march=arm | grep ldrh | count 1  ; RUN: llvm-as < %s | llc -march=arm | grep ldrsb | count 1  ; RUN: llvm-as < %s | llc -march=arm | grep ldrsh | count 1 -; RUN: llvm-as < %s | llc -march=thumb | grep ldrb | count 1 -; RUN: llvm-as < %s | llc -march=thumb | grep ldrh | count 1 -; RUN: llvm-as < %s | llc -march=thumb | grep ldrsb | count 1 -; RUN: llvm-as < %s | llc -march=thumb | grep ldrsh | count 1  define i32 @test1(i8* %v.pntr.s0.u1) {      %tmp.u = load i8* %v.pntr.s0.u1 diff --git a/test/CodeGen/ARM/ldr_frame.ll b/test/CodeGen/ARM/ldr_frame.ll index 56acc90097998..44315066c4c00 100644 --- a/test/CodeGen/ARM/ldr_frame.ll +++ b/test/CodeGen/ARM/ldr_frame.ll @@ -1,5 +1,4 @@  ; RUN: llvm-as < %s | llc -march=arm | not grep mov -; RUN: llvm-as < %s | llc -march=thumb | grep cpy | count 2  define i32 @f1() {  	%buf = alloca [32 x i32], align 4 diff --git a/test/CodeGen/ARM/long-setcc.ll b/test/CodeGen/ARM/long-setcc.ll index 12af8b8d11fd9..4bab330c73604 100644 --- a/test/CodeGen/ARM/long-setcc.ll +++ b/test/CodeGen/ARM/long-setcc.ll @@ -1,5 +1,4 @@  ; RUN: llvm-as < %s | llc -march=arm | grep cmp | count 1 -; RUN: llvm-as < %s | llc -march=thumb | grep cmp | count 1  define i1 @t1(i64 %x) { diff --git a/test/CodeGen/ARM/long.ll b/test/CodeGen/ARM/long.ll index c7bb3866a5d30..fe0ee5473305b 100644 --- a/test/CodeGen/ARM/long.ll +++ b/test/CodeGen/ARM/long.ll @@ -9,13 +9,6 @@  ; RUN:   grep smull | count 1  ; RUN: llvm-as < %s | llc -march=arm | \  ; RUN:   grep umull | count 1 -; RUN: llvm-as < %s | llc -march=thumb | \ -; RUN:   grep mvn | count 1 -; RUN: llvm-as < %s | llc -march=thumb | \ -; RUN:   grep adc | count 1 -; RUN: llvm-as < %s | llc -march=thumb | \ -; RUN:   grep sbc | count 1 -; RUN: llvm-as < %s | llc -march=thumb | grep __muldi3  define i64 @f1() {  entry: diff --git a/test/CodeGen/ARM/long_shift.ll b/test/CodeGen/ARM/long_shift.ll index 8d5d2f387973b..55d0cdc54151c 100644 --- a/test/CodeGen/ARM/long_shift.ll +++ b/test/CodeGen/ARM/long_shift.ll @@ -1,4 +1,3 @@ -; RUN: llvm-as < %s | llc -march=thumb  ; RUN: llvm-as < %s | llc -march=arm > %t  ; RUN: grep rrx %t | count 1  ; RUN: grep __ashldi3 %t diff --git a/test/CodeGen/ARM/mul.ll b/test/CodeGen/ARM/mul.ll index f4f0a04266c2e..3543b5de55db7 100644 --- a/test/CodeGen/ARM/mul.ll +++ b/test/CodeGen/ARM/mul.ll @@ -1,7 +1,5 @@  ; RUN: llvm-as < %s | llc -march=arm | grep mul | count 2  ; RUN: llvm-as < %s | llc -march=arm | grep lsl | count 2 -; RUN: llvm-as < %s | llc -march=thumb | grep mul | count 3 -; RUN: llvm-as < %s | llc -march=thumb | grep lsl | count 1  define i32 @f1(i32 %u) {      %tmp = mul i32 %u, %u diff --git a/test/CodeGen/ARM/select.ll b/test/CodeGen/ARM/select.ll index ba29c30af5b60..5148a5b86998c 100644 --- a/test/CodeGen/ARM/select.ll +++ b/test/CodeGen/ARM/select.ll @@ -6,13 +6,6 @@  ; RUN: llvm-as < %s | llc -march=arm | grep movhi | count 1  ; RUN: llvm-as < %s | llc -march=arm -mattr=+vfp2 | \  ; RUN:   grep fcpydmi | count 1 -; RUN: llvm-as < %s | llc -march=thumb | grep beq | count 1 -; RUN: llvm-as < %s | llc -march=thumb | grep bgt | count 1 -; RUN: llvm-as < %s | llc -march=thumb | grep blt | count 3 -; RUN: llvm-as < %s | llc -march=thumb | grep ble | count 1 -; RUN: llvm-as < %s | llc -march=thumb | grep bls | count 1 -; RUN: llvm-as < %s | llc -march=thumb | grep bhi | count 1 -; RUN: llvm-as < %s | llc -march=thumb | grep __ltdf2  define i32 @f1(i32 %a.s) {  entry: diff --git a/test/CodeGen/ARM/stack-frame.ll b/test/CodeGen/ARM/stack-frame.ll index 73ae11b973c20..c3dd65a594d67 100644 --- a/test/CodeGen/ARM/stack-frame.ll +++ b/test/CodeGen/ARM/stack-frame.ll @@ -1,7 +1,5 @@  ; RUN: llvm-as < %s | llc -march=arm  ; RUN: llvm-as < %s | llc -march=arm | grep add | count 1 -; RUN: llvm-as < %s | llc -march=thumb -; RUN: llvm-as < %s | llc -march=thumb | grep add | count 1  define void @f1() {  	%c = alloca i8, align 1 diff --git a/test/CodeGen/ARM/tst_teq.ll b/test/CodeGen/ARM/tst_teq.ll index e5aa029d2c1e0..bdeee3fa43fee 100644 --- a/test/CodeGen/ARM/tst_teq.ll +++ b/test/CodeGen/ARM/tst_teq.ll @@ -1,6 +1,5 @@  ; RUN: llvm-as < %s | llc -march=arm | grep tst  ; RUN: llvm-as < %s | llc -march=arm | grep teq -; RUN: llvm-as < %s | llc -march=thumb | grep tst  define i32 @f(i32 %a) {  entry: diff --git a/test/CodeGen/ARM/unord.ll b/test/CodeGen/ARM/unord.ll index e1774232d1599..149afc4abafe9 100644 --- a/test/CodeGen/ARM/unord.ll +++ b/test/CodeGen/ARM/unord.ll @@ -1,7 +1,5 @@  ; RUN: llvm-as < %s | llc -march=arm | grep movne | count 1  ; RUN: llvm-as < %s | llc -march=arm | grep moveq | count 1 -; RUN: llvm-as < %s | llc -march=thumb | grep bne | count 1 -; RUN: llvm-as < %s | llc -march=thumb | grep beq | count 1  define i32 @f1(float %X, float %Y) {  	%tmp = fcmp uno float %X, %Y diff --git a/test/CodeGen/PowerPC/int-fp-conv-0.ll b/test/CodeGen/PowerPC/int-fp-conv-0.ll index 3dfc4b10bc5cf..82a182685143e 100644 --- a/test/CodeGen/PowerPC/int-fp-conv-0.ll +++ b/test/CodeGen/PowerPC/int-fp-conv-0.ll @@ -1,4 +1,3 @@ -; RUN: llvm-as < %s | llc -march=ppc64 -debug |& not grep {= store}  ; RUN: llvm-as < %s | llc -march=ppc64 > %t  ; RUN: grep  __floattitf %t  ; RUN: grep  __fixunstfti %t diff --git a/test/CodeGen/ARM/2007-01-31-RegInfoAssert.ll b/test/CodeGen/Thumb/2007-01-31-RegInfoAssert.ll index 19c156d47f433..19c156d47f433 100644 --- a/test/CodeGen/ARM/2007-01-31-RegInfoAssert.ll +++ b/test/CodeGen/Thumb/2007-01-31-RegInfoAssert.ll diff --git a/test/CodeGen/ARM/2007-02-02-JoinIntervalsCrash.ll b/test/CodeGen/Thumb/2007-02-02-JoinIntervalsCrash.ll index ee52cf0f4e7b1..ee52cf0f4e7b1 100644 --- a/test/CodeGen/ARM/2007-02-02-JoinIntervalsCrash.ll +++ b/test/CodeGen/Thumb/2007-02-02-JoinIntervalsCrash.ll diff --git a/test/CodeGen/ARM/2007-03-06-AddR7.ll b/test/CodeGen/Thumb/2007-03-06-AddR7.ll index ad3e195a0dd79..ad3e195a0dd79 100644 --- a/test/CodeGen/ARM/2007-03-06-AddR7.ll +++ b/test/CodeGen/Thumb/2007-03-06-AddR7.ll diff --git a/test/CodeGen/ARM/2007-05-05-InvalidPushPop.ll b/test/CodeGen/Thumb/2007-05-05-InvalidPushPop.ll index 159be4eca3348..159be4eca3348 100644 --- a/test/CodeGen/ARM/2007-05-05-InvalidPushPop.ll +++ b/test/CodeGen/Thumb/2007-05-05-InvalidPushPop.ll diff --git a/test/CodeGen/ARM/2009-06-18-ThumbCommuteMul.ll b/test/CodeGen/Thumb/2009-06-18-ThumbCommuteMul.ll index 9b2aba94ec8d2..9b2aba94ec8d2 100644 --- a/test/CodeGen/ARM/2009-06-18-ThumbCommuteMul.ll +++ b/test/CodeGen/Thumb/2009-06-18-ThumbCommuteMul.ll diff --git a/test/CodeGen/Thumb/dg.exp b/test/CodeGen/Thumb/dg.exp new file mode 100644 index 0000000000000..3ff359aab39b5 --- /dev/null +++ b/test/CodeGen/Thumb/dg.exp @@ -0,0 +1,5 @@ +load_lib llvm.exp + +if { [llvm_supports_target ARM] } { +  RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]] +} diff --git a/test/CodeGen/Thumb/dyn-stackalloc.ll b/test/CodeGen/Thumb/dyn-stackalloc.ll new file mode 100644 index 0000000000000..cd76250bf0a71 --- /dev/null +++ b/test/CodeGen/Thumb/dyn-stackalloc.ll @@ -0,0 +1,59 @@ +; RUN: llvm-as < %s | llc -march=thumb | not grep {ldr sp} +; RUN: llvm-as < %s | llc -mtriple=thumb-apple-darwin | \ +; RUN:   not grep {sub.*r7} +; RUN: llvm-as < %s | llc -march=thumb | grep 4294967280 + +	%struct.state = type { i32, %struct.info*, float**, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i64, i64, i64, i64, i8* } +	%struct.info = type { i32, i32, i32, i32, i32, i32, i32, i8* } + +define void @t1(%struct.state* %v) { +	%tmp6 = load i32* null +	%tmp8 = alloca float, i32 %tmp6 +	store i32 1, i32* null +	br i1 false, label %bb123.preheader, label %return + +bb123.preheader: +	br i1 false, label %bb43, label %return + +bb43: +	call fastcc void @f1( float* %tmp8, float* null, i32 0 ) +	%tmp70 = load i32* null +	%tmp85 = getelementptr float* %tmp8, i32 0 +	call fastcc void @f2( float* null, float* null, float* %tmp85, i32 %tmp70 ) +	ret void + +return: +	ret void +} + +declare fastcc void @f1(float*, float*, i32) + +declare fastcc void @f2(float*, float*, float*, i32) + +	%struct.comment = type { i8**, i32*, i32, i8* } +@str215 = external global [2 x i8] + +define void @t2(%struct.comment* %vc, i8* %tag, i8* %contents) { +	%tmp1 = call i32 @strlen( i8* %tag ) +	%tmp3 = call i32 @strlen( i8* %contents ) +	%tmp4 = add i32 %tmp1, 2 +	%tmp5 = add i32 %tmp4, %tmp3 +	%tmp6 = alloca i8, i32 %tmp5 +	%tmp9 = call i8* @strcpy( i8* %tmp6, i8* %tag ) +	%tmp6.len = call i32 @strlen( i8* %tmp6 ) +	%tmp6.indexed = getelementptr i8* %tmp6, i32 %tmp6.len +	call void @llvm.memcpy.i32( i8* %tmp6.indexed, i8* getelementptr ([2 x i8]* @str215, i32 0, i32 0), i32 2, i32 1 ) +	%tmp15 = call i8* @strcat( i8* %tmp6, i8* %contents ) +	call fastcc void @comment_add( %struct.comment* %vc, i8* %tmp6 ) +	ret void +} + +declare i32 @strlen(i8*) + +declare i8* @strcat(i8*, i8*) + +declare fastcc void @comment_add(%struct.comment*, i8*) + +declare void @llvm.memcpy.i32(i8*, i8*, i32, i32) + +declare i8* @strcpy(i8*, i8*) diff --git a/test/CodeGen/Thumb/fpconv.ll b/test/CodeGen/Thumb/fpconv.ll new file mode 100644 index 0000000000000..2003131fbb734 --- /dev/null +++ b/test/CodeGen/Thumb/fpconv.ll @@ -0,0 +1,61 @@ +; RUN: llvm-as < %s | llc -march=thumb + +define float @f1(double %x) { +entry: +	%tmp1 = fptrunc double %x to float		; <float> [#uses=1] +	ret float %tmp1 +} + +define double @f2(float %x) { +entry: +	%tmp1 = fpext float %x to double		; <double> [#uses=1] +	ret double %tmp1 +} + +define i32 @f3(float %x) { +entry: +	%tmp = fptosi float %x to i32		; <i32> [#uses=1] +	ret i32 %tmp +} + +define i32 @f4(float %x) { +entry: +	%tmp = fptoui float %x to i32		; <i32> [#uses=1] +	ret i32 %tmp +} + +define i32 @f5(double %x) { +entry: +	%tmp = fptosi double %x to i32		; <i32> [#uses=1] +	ret i32 %tmp +} + +define i32 @f6(double %x) { +entry: +	%tmp = fptoui double %x to i32		; <i32> [#uses=1] +	ret i32 %tmp +} + +define float @f7(i32 %a) { +entry: +	%tmp = sitofp i32 %a to float		; <float> [#uses=1] +	ret float %tmp +} + +define double @f8(i32 %a) { +entry: +	%tmp = sitofp i32 %a to double		; <double> [#uses=1] +	ret double %tmp +} + +define float @f9(i32 %a) { +entry: +	%tmp = uitofp i32 %a to float		; <float> [#uses=1] +	ret float %tmp +} + +define double @f10(i32 %a) { +entry: +	%tmp = uitofp i32 %a to double		; <double> [#uses=1] +	ret double %tmp +} diff --git a/test/CodeGen/Thumb/fpow.ll b/test/CodeGen/Thumb/fpow.ll new file mode 100644 index 0000000000000..e5b92ad94ef85 --- /dev/null +++ b/test/CodeGen/Thumb/fpow.ll @@ -0,0 +1,9 @@ +; RUN: llvm-as < %s | llc -march=thumb + +define double @t(double %x, double %y) nounwind optsize { +entry: +	%0 = tail call double @llvm.pow.f64( double %x, double %y )		; <double> [#uses=1] +	ret double %0 +} + +declare double @llvm.pow.f64(double, double) nounwind readonly diff --git a/test/CodeGen/Thumb/frame_thumb.ll b/test/CodeGen/Thumb/frame_thumb.ll new file mode 100644 index 0000000000000..270e331cb52f5 --- /dev/null +++ b/test/CodeGen/Thumb/frame_thumb.ll @@ -0,0 +1,9 @@ +; RUN: llvm-as < %s | llc -mtriple=thumb-apple-darwin \ +; RUN:     -disable-fp-elim | not grep {r11} +; RUN: llvm-as < %s | llc -mtriple=thumb-linux-gnueabi \ +; RUN:     -disable-fp-elim | not grep {r11} + +define i32 @f() { +entry: +	ret i32 10 +} diff --git a/test/CodeGen/Thumb/iabs.ll b/test/CodeGen/Thumb/iabs.ll new file mode 100644 index 0000000000000..13084f6870eea --- /dev/null +++ b/test/CodeGen/Thumb/iabs.ll @@ -0,0 +1,17 @@ +; RUN: llvm-as < %s | llc -march=thumb -stats |& \ +; RUN:   grep {4 .*Number of machine instrs printed} + +;; Integer absolute value, should produce something as good as: +;; Thumb: +;;   asr r2, r0, #31 +;;   add r0, r0, r2 +;;   eor r0, r2 +;;   bx lr + +define i32 @test(i32 %a) { +        %tmp1neg = sub i32 0, %a +        %b = icmp sgt i32 %a, -1 +        %abs = select i1 %b, i32 %a, i32 %tmp1neg +        ret i32 %abs +} + diff --git a/test/CodeGen/ARM/inlineasm-imm-thumb.ll b/test/CodeGen/Thumb/inlineasm-imm-thumb.ll index 2c872e7e310fd..2c872e7e310fd 100644 --- a/test/CodeGen/ARM/inlineasm-imm-thumb.ll +++ b/test/CodeGen/Thumb/inlineasm-imm-thumb.ll diff --git a/test/CodeGen/Thumb/ispositive.ll b/test/CodeGen/Thumb/ispositive.ll new file mode 100644 index 0000000000000..91f5970ae9cbe --- /dev/null +++ b/test/CodeGen/Thumb/ispositive.ll @@ -0,0 +1,9 @@ +; RUN: llvm-as < %s | llc -march=thumb | grep {lsr r0, r0, #31} + +define i32 @test1(i32 %X) { +entry: +        icmp slt i32 %X, 0              ; <i1>:0 [#uses=1] +        zext i1 %0 to i32               ; <i32>:1 [#uses=1] +        ret i32 %1 +} + diff --git a/test/CodeGen/Thumb/large-stack.ll b/test/CodeGen/Thumb/large-stack.ll new file mode 100644 index 0000000000000..f7c9ed07009f4 --- /dev/null +++ b/test/CodeGen/Thumb/large-stack.ll @@ -0,0 +1,20 @@ +; RUN: llvm-as < %s | llc -march=thumb | grep {ldr.*LCP} | count 5 + +define void @test1() { +    %tmp = alloca [ 64 x i32 ] , align 4 +    ret void +} + +define void @test2() { +    %tmp = alloca [ 4168 x i8 ] , align 4 +    ret void +} + +define i32 @test3() { +	%retval = alloca i32, align 4 +	%tmp = alloca i32, align 4 +	%a = alloca [805306369 x i8], align 16 +	store i32 0, i32* %tmp +	%tmp1 = load i32* %tmp +        ret i32 %tmp1 +} diff --git a/test/CodeGen/Thumb/ldr_ext.ll b/test/CodeGen/Thumb/ldr_ext.ll new file mode 100644 index 0000000000000..4b2a7b201b55b --- /dev/null +++ b/test/CodeGen/Thumb/ldr_ext.ll @@ -0,0 +1,28 @@ +; RUN: llvm-as < %s | llc -march=thumb | grep ldrb | count 1 +; RUN: llvm-as < %s | llc -march=thumb | grep ldrh | count 1 +; RUN: llvm-as < %s | llc -march=thumb | grep ldrsb | count 1 +; RUN: llvm-as < %s | llc -march=thumb | grep ldrsh | count 1 + +define i32 @test1(i8* %v.pntr.s0.u1) { +    %tmp.u = load i8* %v.pntr.s0.u1 +    %tmp1.s = zext i8 %tmp.u to i32 +    ret i32 %tmp1.s +} + +define i32 @test2(i16* %v.pntr.s0.u1) { +    %tmp.u = load i16* %v.pntr.s0.u1 +    %tmp1.s = zext i16 %tmp.u to i32 +    ret i32 %tmp1.s +} + +define i32 @test3(i8* %v.pntr.s1.u0) { +    %tmp.s = load i8* %v.pntr.s1.u0 +    %tmp1.s = sext i8 %tmp.s to i32 +    ret i32 %tmp1.s +} + +define i32 @test4() { +    %tmp.s = load i16* null +    %tmp1.s = sext i16 %tmp.s to i32 +    ret i32 %tmp1.s +} diff --git a/test/CodeGen/Thumb/ldr_frame.ll b/test/CodeGen/Thumb/ldr_frame.ll new file mode 100644 index 0000000000000..0043fb502a329 --- /dev/null +++ b/test/CodeGen/Thumb/ldr_frame.ll @@ -0,0 +1,31 @@ +; RUN: llvm-as < %s | llc -march=thumb | grep cpy | count 2 + +define i32 @f1() { +	%buf = alloca [32 x i32], align 4 +	%tmp = getelementptr [32 x i32]* %buf, i32 0, i32 0 +	%tmp1 = load i32* %tmp +	ret i32 %tmp1 +} + +define i32 @f2() { +	%buf = alloca [32 x i8], align 4 +	%tmp = getelementptr [32 x i8]* %buf, i32 0, i32 0 +	%tmp1 = load i8* %tmp +        %tmp2 = zext i8 %tmp1 to i32 +	ret i32 %tmp2 +} + +define i32 @f3() { +	%buf = alloca [32 x i32], align 4 +	%tmp = getelementptr [32 x i32]* %buf, i32 0, i32 32 +	%tmp1 = load i32* %tmp +	ret i32 %tmp1 +} + +define i32 @f4() { +	%buf = alloca [32 x i8], align 4 +	%tmp = getelementptr [32 x i8]* %buf, i32 0, i32 2 +	%tmp1 = load i8* %tmp +        %tmp2 = zext i8 %tmp1 to i32 +	ret i32 %tmp2 +} diff --git a/test/CodeGen/Thumb/long-setcc.ll b/test/CodeGen/Thumb/long-setcc.ll new file mode 100644 index 0000000000000..df6d137a088fa --- /dev/null +++ b/test/CodeGen/Thumb/long-setcc.ll @@ -0,0 +1,17 @@ +; RUN: llvm-as < %s | llc -march=thumb | grep cmp | count 1 + + +define i1 @t1(i64 %x) { +	%B = icmp slt i64 %x, 0 +	ret i1 %B +} + +define i1 @t2(i64 %x) { +	%tmp = icmp ult i64 %x, 4294967296 +	ret i1 %tmp +} + +define i1 @t3(i32 %x) { +	%tmp = icmp ugt i32 %x, -1 +	ret i1 %tmp +} diff --git a/test/CodeGen/Thumb/long.ll b/test/CodeGen/Thumb/long.ll new file mode 100644 index 0000000000000..22874437eb020 --- /dev/null +++ b/test/CodeGen/Thumb/long.ll @@ -0,0 +1,76 @@ +; RUN: llvm-as < %s | llc -march=thumb | \ +; RUN:   grep mvn | count 1 +; RUN: llvm-as < %s | llc -march=thumb | \ +; RUN:   grep adc | count 1 +; RUN: llvm-as < %s | llc -march=thumb | \ +; RUN:   grep sbc | count 1 +; RUN: llvm-as < %s | llc -march=thumb | grep __muldi3 + +define i64 @f1() { +entry: +        ret i64 0 +} + +define i64 @f2() { +entry: +        ret i64 1 +} + +define i64 @f3() { +entry: +        ret i64 2147483647 +} + +define i64 @f4() { +entry: +        ret i64 2147483648 +} + +define i64 @f5() { +entry: +        ret i64 9223372036854775807 +} + +define i64 @f6(i64 %x, i64 %y) { +entry: +        %tmp1 = add i64 %y, 1           ; <i64> [#uses=1] +        ret i64 %tmp1 +} + +define void @f7() { +entry: +        %tmp = call i64 @f8( )          ; <i64> [#uses=0] +        ret void +} + +declare i64 @f8() + +define i64 @f9(i64 %a, i64 %b) { +entry: +        %tmp = sub i64 %a, %b           ; <i64> [#uses=1] +        ret i64 %tmp +} + +define i64 @f(i32 %a, i32 %b) { +entry: +        %tmp = sext i32 %a to i64               ; <i64> [#uses=1] +        %tmp1 = sext i32 %b to i64              ; <i64> [#uses=1] +        %tmp2 = mul i64 %tmp1, %tmp             ; <i64> [#uses=1] +        ret i64 %tmp2 +} + +define i64 @g(i32 %a, i32 %b) { +entry: +        %tmp = zext i32 %a to i64               ; <i64> [#uses=1] +        %tmp1 = zext i32 %b to i64              ; <i64> [#uses=1] +        %tmp2 = mul i64 %tmp1, %tmp             ; <i64> [#uses=1] +        ret i64 %tmp2 +} + +define i64 @f10() { +entry: +        %a = alloca i64, align 8                ; <i64*> [#uses=1] +        %retval = load i64* %a          ; <i64> [#uses=1] +        ret i64 %retval +} + diff --git a/test/CodeGen/Thumb/select.ll b/test/CodeGen/Thumb/select.ll new file mode 100644 index 0000000000000..ae75549d723ef --- /dev/null +++ b/test/CodeGen/Thumb/select.ll @@ -0,0 +1,55 @@ +; RUN: llvm-as < %s | llc -march=thumb | grep beq | count 1 +; RUN: llvm-as < %s | llc -march=thumb | grep bgt | count 1 +; RUN: llvm-as < %s | llc -march=thumb | grep blt | count 3 +; RUN: llvm-as < %s | llc -march=thumb | grep ble | count 1 +; RUN: llvm-as < %s | llc -march=thumb | grep bls | count 1 +; RUN: llvm-as < %s | llc -march=thumb | grep bhi | count 1 +; RUN: llvm-as < %s | llc -march=thumb | grep __ltdf2 + +define i32 @f1(i32 %a.s) { +entry: +    %tmp = icmp eq i32 %a.s, 4 +    %tmp1.s = select i1 %tmp, i32 2, i32 3 +    ret i32 %tmp1.s +} + +define i32 @f2(i32 %a.s) { +entry: +    %tmp = icmp sgt i32 %a.s, 4 +    %tmp1.s = select i1 %tmp, i32 2, i32 3 +    ret i32 %tmp1.s +} + +define i32 @f3(i32 %a.s, i32 %b.s) { +entry: +    %tmp = icmp slt i32 %a.s, %b.s +    %tmp1.s = select i1 %tmp, i32 2, i32 3 +    ret i32 %tmp1.s +} + +define i32 @f4(i32 %a.s, i32 %b.s) { +entry: +    %tmp = icmp sle i32 %a.s, %b.s +    %tmp1.s = select i1 %tmp, i32 2, i32 3 +    ret i32 %tmp1.s +} + +define i32 @f5(i32 %a.u, i32 %b.u) { +entry: +    %tmp = icmp ule i32 %a.u, %b.u +    %tmp1.s = select i1 %tmp, i32 2, i32 3 +    ret i32 %tmp1.s +} + +define i32 @f6(i32 %a.u, i32 %b.u) { +entry: +    %tmp = icmp ugt i32 %a.u, %b.u +    %tmp1.s = select i1 %tmp, i32 2, i32 3 +    ret i32 %tmp1.s +} + +define double @f7(double %a, double %b) { +    %tmp = fcmp olt double %a, 1.234e+00 +    %tmp1 = select i1 %tmp, double -1.000e+00, double %b +    ret double %tmp1 +} diff --git a/test/CodeGen/Thumb/stack-frame.ll b/test/CodeGen/Thumb/stack-frame.ll new file mode 100644 index 0000000000000..756d257c2ae94 --- /dev/null +++ b/test/CodeGen/Thumb/stack-frame.ll @@ -0,0 +1,13 @@ +; RUN: llvm-as < %s | llc -march=thumb +; RUN: llvm-as < %s | llc -march=thumb | grep add | count 1 + +define void @f1() { +	%c = alloca i8, align 1 +	ret void +} + +define i32 @f2() { +	ret i32 1 +} + + diff --git a/test/CodeGen/ARM/thumb-imm.ll b/test/CodeGen/Thumb/thumb-imm.ll index 2be393a95cacb..2be393a95cacb 100644 --- a/test/CodeGen/ARM/thumb-imm.ll +++ b/test/CodeGen/Thumb/thumb-imm.ll diff --git a/test/CodeGen/Thumb/tst_teq.ll b/test/CodeGen/Thumb/tst_teq.ll new file mode 100644 index 0000000000000..0456951e10503 --- /dev/null +++ b/test/CodeGen/Thumb/tst_teq.ll @@ -0,0 +1,17 @@ +; RUN: llvm-as < %s | llc -march=thumb | grep tst + +define i32 @f(i32 %a) { +entry: +	%tmp2 = and i32 %a, 255		; <i32> [#uses=1] +	icmp eq i32 %tmp2, 0		; <i1>:0 [#uses=1] +	%retval = select i1 %0, i32 20, i32 10		; <i32> [#uses=1] +	ret i32 %retval +} + +define i32 @g(i32 %a) { +entry: +        %tmp2 = xor i32 %a, 255 +	icmp eq i32 %tmp2, 0		; <i1>:0 [#uses=1] +	%retval = select i1 %0, i32 20, i32 10		; <i32> [#uses=1] +	ret i32 %retval +} diff --git a/test/CodeGen/Thumb/unord.ll b/test/CodeGen/Thumb/unord.ll new file mode 100644 index 0000000000000..4202d269c0e7e --- /dev/null +++ b/test/CodeGen/Thumb/unord.ll @@ -0,0 +1,14 @@ +; RUN: llvm-as < %s | llc -march=thumb | grep bne | count 1 +; RUN: llvm-as < %s | llc -march=thumb | grep beq | count 1 + +define i32 @f1(float %X, float %Y) { +	%tmp = fcmp uno float %X, %Y +	%retval = select i1 %tmp, i32 1, i32 -1 +	ret i32 %retval +} + +define i32 @f2(float %X, float %Y) { +	%tmp = fcmp ord float %X, %Y +	%retval = select i1 %tmp, i32 1, i32 -1 +	ret i32 %retval +} diff --git a/test/CodeGen/ARM/vargs2.ll b/test/CodeGen/Thumb/vargs.ll index 5cc86a95ba09d..a18010f2fadd4 100644 --- a/test/CodeGen/ARM/vargs2.ll +++ b/test/CodeGen/Thumb/vargs.ll @@ -1,6 +1,6 @@  ; RUN: llvm-as < %s | llc -march=thumb -; RUN: llvm-as < %s | llc -mtriple=arm-linux -march=thumb | grep pop | count 1 -; RUN: llvm-as < %s | llc -mtriple=arm-darwin -march=thumb | grep pop | count 2 +; RUN: llvm-as < %s | llc -mtriple=thumb-linux | grep pop | count 1 +; RUN: llvm-as < %s | llc -mtriple=thumb-darwin | grep pop | count 2  @str = internal constant [4 x i8] c"%d\0A\00"           ; <[4 x i8]*> [#uses=1] diff --git a/test/CodeGen/Thumb2/carry.ll b/test/CodeGen/Thumb2/carry.ll new file mode 100644 index 0000000000000..3450c5aea4051 --- /dev/null +++ b/test/CodeGen/Thumb2/carry.ll @@ -0,0 +1,16 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep "subs r" | count 2 +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep "adc r" +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep "sbc r"  | count 2 + +define i64 @f1(i64 %a, i64 %b) { +entry: +	%tmp = sub i64 %a, %b +	ret i64 %tmp +} + +define i64 @f2(i64 %a, i64 %b) { +entry: +        %tmp1 = shl i64 %a, 1 +	%tmp2 = sub i64 %tmp1, %b +	ret i64 %tmp2 +} diff --git a/test/CodeGen/Thumb2/dg.exp b/test/CodeGen/Thumb2/dg.exp new file mode 100644 index 0000000000000..3ff359aab39b5 --- /dev/null +++ b/test/CodeGen/Thumb2/dg.exp @@ -0,0 +1,5 @@ +load_lib llvm.exp + +if { [llvm_supports_target ARM] } { +  RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]] +} diff --git a/test/CodeGen/Thumb2/load-global.ll b/test/CodeGen/Thumb2/load-global.ll new file mode 100644 index 0000000000000..0ffcb9575d5c2 --- /dev/null +++ b/test/CodeGen/Thumb2/load-global.ll @@ -0,0 +1,9 @@ +; RUN: llvm-as < %s | llc -mtriple=thumbv7-apple-darwin +; RUN: llvm-as < %s | llc -mtriple=thumbv7-apple-darwin -relocation-model=pic | grep add | grep pc + +@G = external global i32 + +define i32 @test1() { +	%tmp = load i32* @G +	ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/pic-jtbl.ll b/test/CodeGen/Thumb2/pic-jtbl.ll new file mode 100644 index 0000000000000..701d308326476 --- /dev/null +++ b/test/CodeGen/Thumb2/pic-jtbl.ll @@ -0,0 +1,55 @@ +; RUN: llvm-as < %s | llc -mtriple=thumbv7-apple-darwin -relocation-model=pic \ +; RUN:   -o %t -f +; RUN: grep add %t | grep pc +;; NOT YET: grep "add pc" + +define void @bar(i32 %n.u) { +entry: +    switch i32 %n.u, label %bb12 [i32 1, label %bb i32 2, label %bb6 i32 4, label %bb7 i32 5, label %bb8 i32 6, label %bb10 i32 7, label %bb1 i32 8, label %bb3 i32 9, label %bb4 i32 10, label %bb9 i32 11, label %bb2 i32 12, label %bb5 i32 13, label %bb11 ] +bb: +    tail call void(...)* @foo1() +    ret void +bb1: +    tail call void(...)* @foo2() +    ret void +bb2: +    tail call void(...)* @foo6() +    ret void +bb3: +    tail call void(...)* @foo3() +    ret void +bb4: +    tail call void(...)* @foo4() +    ret void +bb5: +    tail call void(...)* @foo5() +    ret void +bb6: +    tail call void(...)* @foo1() +    ret void +bb7: +    tail call void(...)* @foo2() +    ret void +bb8: +    tail call void(...)* @foo6() +    ret void +bb9: +    tail call void(...)* @foo3() +    ret void +bb10: +    tail call void(...)* @foo4() +    ret void +bb11: +    tail call void(...)* @foo5() +    ret void +bb12: +    tail call void(...)* @foo6() +    ret void +} + +declare void @foo1(...) +declare void @foo2(...) +declare void @foo6(...) +declare void @foo3(...) +declare void @foo4(...) +declare void @foo5(...) diff --git a/test/CodeGen/Thumb2/thumb2-adc.ll b/test/CodeGen/Thumb2/thumb2-adc.ll new file mode 100644 index 0000000000000..4424c1ac90071 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-adc.ll @@ -0,0 +1,32 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {adc\\W*r\[0-9\],\\W*r\[0-9\],\\W*#\[0-9\]*} | grep {#171\\|#1179666\\|#872428544\\|#1448498774\\|#66846720} | count 5 + +; 734439407617 = 0x000000ab00000001 +define i64 @f1(i64 %a) { +    %tmp = add i64 %a, 734439407617 +    ret i64 %tmp +} + +; 5066626890203137 = 0x0012001200000001 +define i64 @f2(i64 %a) { +    %tmp = add i64 %a, 5066626890203137 +    ret i64 %tmp +} + +; 3747052064576897025 = 0x3400340000000001 +define i64 @f3(i64 %a) { +    %tmp = add i64 %a, 3747052064576897025 +    ret i64 %tmp +} + +; 6221254862626095105 = 0x5656565600000001 +define i64 @f4(i64 %a) { +    %tmp = add i64 %a, 6221254862626095105  +    ret i64 %tmp +} + +; 287104476244869121 = 0x03fc000000000001 +define i64 @f5(i64 %a) { +    %tmp = add i64 %a, 287104476244869121  +    ret i64 %tmp +} + diff --git a/test/CodeGen/Thumb2/thumb2-adc2.ll b/test/CodeGen/Thumb2/thumb2-adc2.ll new file mode 100644 index 0000000000000..2530d8da0e62f --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-adc2.ll @@ -0,0 +1,6 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {adc\\W*r\[0-9\],\\W*r\[0-9\],\\W*r\[0-9\]*} | count 1 + +define i64 @f1(i64 %a, i64 %b) { +    %tmp = add i64 %a, %b +    ret i64 %tmp +} diff --git a/test/CodeGen/ARM/thumb2-add.ll b/test/CodeGen/Thumb2/thumb2-add.ll index d4f408ff76e7a..d4f408ff76e7a 100644 --- a/test/CodeGen/ARM/thumb2-add.ll +++ b/test/CodeGen/Thumb2/thumb2-add.ll diff --git a/test/CodeGen/Thumb2/thumb2-add2.ll b/test/CodeGen/Thumb2/thumb2-add2.ll new file mode 100644 index 0000000000000..f94b3c166d8a3 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-add2.ll @@ -0,0 +1,36 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {add\\W*r\[0-9\],\\W*r\[0-9\],\\W*#\[0-9\]*} | grep {#171\\|#1179666\\|#872428544\\|#1448498774\\|#510} | count 5 + +; 171 = 0x000000ab +define i32 @f1(i32 %a) { +    %tmp = add i32 %a, 171 +    ret i32 %tmp +} + +; 1179666 = 0x00120012 +define i32 @f2(i32 %a) { +    %tmp = add i32 %a, 1179666 +    ret i32 %tmp +} + +; 872428544 = 0x34003400 +define i32 @f3(i32 %a) { +    %tmp = add i32 %a, 872428544 +    ret i32 %tmp +} + +; 1448498774 = 0x56565656 +define i32 @f4(i32 %a) { +    %tmp = add i32 %a, 1448498774 +    ret i32 %tmp +} + +; 510 = 0x000001fe +define i32 @f5(i32 %a) { +    %tmp = add i32 %a, 510 +    ret i32 %tmp +} + +define i32 @f6(i32 %a) { +    %tmp = add i32 %a, 4095 +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-add3.ll b/test/CodeGen/Thumb2/thumb2-add3.ll new file mode 100644 index 0000000000000..1e6341e882fdf --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-add3.ll @@ -0,0 +1,6 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {addw\\W*r\[0-9\],\\W*r\[0-9\],\\W*#\[0-9\]*} | grep {#4095} | count 1 + +define i32 @f1(i32 %a) { +    %tmp = add i32 %a, 4095 +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-add4.ll b/test/CodeGen/Thumb2/thumb2-add4.ll new file mode 100644 index 0000000000000..b74a33c90a102 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-add4.ll @@ -0,0 +1,31 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {adds\\W*r\[0-9\],\\W*r\[0-9\],\\W*#\[0-9\]*} | grep {#171\\|#1179666\\|#872428544\\|#1448498774\\|#66846720} | count 5 + +; 171 = 0x000000ab +define i64 @f1(i64 %a) { +    %tmp = add i64 %a, 171 +    ret i64 %tmp +} + +; 1179666 = 0x00120012 +define i64 @f2(i64 %a) { +    %tmp = add i64 %a, 1179666 +    ret i64 %tmp +} + +; 872428544 = 0x34003400 +define i64 @f3(i64 %a) { +    %tmp = add i64 %a, 872428544 +    ret i64 %tmp +} + +; 1448498774 = 0x56565656 +define i64 @f4(i64 %a) { +    %tmp = add i64 %a, 1448498774 +    ret i64 %tmp +} + +; 66846720 = 0x03fc0000 +define i64 @f5(i64 %a) { +    %tmp = add i64 %a, 66846720 +    ret i64 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-add5.ll b/test/CodeGen/Thumb2/thumb2-add5.ll new file mode 100644 index 0000000000000..5870be207e255 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-add5.ll @@ -0,0 +1,6 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {add\\W*r\[0-9\],\\W*r\[0-9\],\\W*r\[0-9\]} | count 1 + +define i32 @f1(i32 %a, i32 %b) { +    %tmp = add i32 %a, %b +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-add6.ll b/test/CodeGen/Thumb2/thumb2-add6.ll new file mode 100644 index 0000000000000..9dd3efcacd580 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-add6.ll @@ -0,0 +1,6 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {adds\\W*r\[0-9\],\\W*r\[0-9\],\\W*r\[0-9\]} | count 1 + +define i64 @f1(i64 %a, i64 %b) { +    %tmp = add i64 %a, %b +    ret i64 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-and.ll b/test/CodeGen/Thumb2/thumb2-and.ll new file mode 100644 index 0000000000000..360c977f45e6d --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-and.ll @@ -0,0 +1,6 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {and\\W*r\[0-9\],\\W*r\[0-9\],\\W*r\[0-9\]} | count 1 + +define i32 @f1(i32 %a, i32 %b) { +    %tmp = and i32 %a, %b +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-and2.ll b/test/CodeGen/Thumb2/thumb2-and2.ll new file mode 100644 index 0000000000000..266d256fce511 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-and2.ll @@ -0,0 +1,31 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {and\\W*r\[0-9\],\\W*r\[0-9\],\\W*#\[0-9\]*} | grep {#171\\|#1179666\\|#872428544\\|#1448498774\\|#66846720} | count 5 + +; 171 = 0x000000ab +define i32 @f1(i32 %a) { +    %tmp = and i32 %a, 171 +    ret i32 %tmp +} + +; 1179666 = 0x00120012 +define i32 @f2(i32 %a) { +    %tmp = and i32 %a, 1179666 +    ret i32 %tmp +} + +; 872428544 = 0x34003400 +define i32 @f3(i32 %a) { +    %tmp = and i32 %a, 872428544 +    ret i32 %tmp +} + +; 1448498774 = 0x56565656 +define i32 @f4(i32 %a) { +    %tmp = and i32 %a, 1448498774 +    ret i32 %tmp +} + +; 66846720 = 0x03fc0000 +define i32 @f5(i32 %a) { +    %tmp = and i32 %a, 66846720 +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-asr.ll b/test/CodeGen/Thumb2/thumb2-asr.ll new file mode 100644 index 0000000000000..4edf92be1339e --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-asr.ll @@ -0,0 +1,6 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {asr\\W*r\[0-9\],\\W*r\[0-9\],\\W*r\[0-9\]} | count 1 + +define i32 @f1(i32 %a, i32 %b) { +    %tmp = ashr i32 %a, %b +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-asr2.ll b/test/CodeGen/Thumb2/thumb2-asr2.ll new file mode 100644 index 0000000000000..700794873f3f3 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-asr2.ll @@ -0,0 +1,6 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {asr\\W*r\[0-9\],\\W*r\[0-9\],\\W*#\[0-9\]*} | grep {#17} | count 1 + +define i32 @f1(i32 %a) { +    %tmp = ashr i32 %a, 17 +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-bfc.ll b/test/CodeGen/Thumb2/thumb2-bfc.ll new file mode 100644 index 0000000000000..1e5016c91294b --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-bfc.ll @@ -0,0 +1,19 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep "bfc " | count 3 + +; 4278190095 = 0xff00000f +define i32 @f1(i32 %a) { +    %tmp = and i32 %a, 4278190095 +    ret i32 %tmp +} + +; 4286578688 = 0xff800000 +define i32 @f2(i32 %a) { +    %tmp = and i32 %a, 4286578688 +    ret i32 %tmp +} + +; 4095 = 0x00000fff +define i32 @f3(i32 %a) { +    %tmp = and i32 %a, 4095 +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-bic.ll b/test/CodeGen/Thumb2/thumb2-bic.ll new file mode 100644 index 0000000000000..ac15ad635bf06 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-bic.ll @@ -0,0 +1,25 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {bic\\W*r\[0-9\]*,\\W*r\[0-9\]*,\\W*r\[0-9\]*} | count 4 + +define i32 @f1(i32 %a, i32 %b) { +    %tmp = xor i32 %b, 4294967295 +    %tmp1 = and i32 %a, %tmp +    ret i32 %tmp1 +} + +define i32 @f2(i32 %a, i32 %b) { +    %tmp = xor i32 %b, 4294967295 +    %tmp1 = and i32 %tmp, %a +    ret i32 %tmp1 +} + +define i32 @f3(i32 %a, i32 %b) { +    %tmp = xor i32 4294967295, %b +    %tmp1 = and i32 %a, %tmp +    ret i32 %tmp1 +} + +define i32 @f4(i32 %a, i32 %b) { +    %tmp = xor i32 4294967295, %b +    %tmp1 = and i32 %tmp, %a +    ret i32 %tmp1 +} diff --git a/test/CodeGen/Thumb2/thumb2-bic2.ll b/test/CodeGen/Thumb2/thumb2-bic2.ll new file mode 100644 index 0000000000000..b8abdba187d9e --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-bic2.ll @@ -0,0 +1,25 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep "bic "  | grep {#187\\|#11141290\\|#3422604288\\|#1114112} | count 4 + +; ~0x000000bb = 4294967108 +define i32 @f1(i32 %a) { +    %tmp = and i32 %a, 4294967108 +    ret i32 %tmp +} + +; ~0x00aa00aa = 4283826005 +define i32 @f2(i32 %a) { +    %tmp = and i32 %a, 4283826005 +    ret i32 %tmp +} + +; ~0xcc00cc00 = 872363007 +define i32 @f3(i32 %a) { +    %tmp = and i32 %a, 872363007 +    ret i32 %tmp +} + +; ~0x00110000 = 4293853183 +define i32 @f4(i32 %a) { +    %tmp = and i32 %a, 4293853183 +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-clz.ll b/test/CodeGen/Thumb2/thumb2-clz.ll new file mode 100644 index 0000000000000..e5f94a6c4929d --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-clz.ll @@ -0,0 +1,8 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2,+v7a | grep "clz " | count 1 + +define i32 @f1(i32 %a) { +    %tmp = tail call i32 @llvm.ctlz.i32(i32 %a) +    ret i32 %tmp +} + +declare i32 @llvm.ctlz.i32(i32) nounwind readnone diff --git a/test/CodeGen/Thumb2/thumb2-cmn2.ll b/test/CodeGen/Thumb2/thumb2-cmn2.ll new file mode 100644 index 0000000000000..9763dea045cf2 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-cmn2.ll @@ -0,0 +1,25 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep "cmn "  | grep {#187\\|#11141290\\|#3422604288\\|#1114112} | count 4 + +; -0x000000bb = 4294967109 +define i1 @f1(i32 %a) { +    %tmp = icmp ne i32 %a, 4294967109 +    ret i1 %tmp +} + +; -0x00aa00aa = 4283826006 +define i1 @f2(i32 %a) { +    %tmp = icmp eq i32 %a, 4283826006 +    ret i1 %tmp +} + +; -0xcc00cc00 = 872363008 +define i1 @f3(i32 %a) { +    %tmp = icmp ne i32 %a, 872363008 +    ret i1 %tmp +} + +; -0x00110000 = 4293853184 +define i1 @f4(i32 %a) { +    %tmp = icmp eq i32 %a, 4293853184 +    ret i1 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-cmp.ll b/test/CodeGen/Thumb2/thumb2-cmp.ll new file mode 100644 index 0000000000000..cd2442bb150d0 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-cmp.ll @@ -0,0 +1,31 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep "cmp "  | grep {#187\\|#11141290\\|#3422604288\\|#1114112\\|#3722304989} | count 5 + +; 0x000000bb = 187 +define i1 @f1(i32 %a) { +    %tmp = icmp ne i32 %a, 187 +    ret i1 %tmp +} + +; 0x00aa00aa = 11141290 +define i1 @f2(i32 %a) { +    %tmp = icmp eq i32 %a, 11141290  +    ret i1 %tmp +} + +; 0xcc00cc00 = 3422604288 +define i1 @f3(i32 %a) { +    %tmp = icmp ne i32 %a, 3422604288 +    ret i1 %tmp +} + +; 0xdddddddd = 3722304989 +define i1 @f4(i32 %a) { +    %tmp = icmp ne i32 %a, 3722304989 +    ret i1 %tmp +} + +; 0x00110000 = 1114112 +define i1 @f5(i32 %a) { +    %tmp = icmp eq i32 %a, 1114112 +    ret i1 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-cmp2.ll b/test/CodeGen/Thumb2/thumb2-cmp2.ll new file mode 100644 index 0000000000000..8c60b463d7ba5 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-cmp2.ll @@ -0,0 +1,11 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {cmp\\W*r\[0-9\],\\W*r\[0-9\]} | count 2 + +define i1 @f1(i32 %a, i32 %b) { +    %tmp = icmp ne i32 %a, %b +    ret i1 %tmp +} + +define i1 @f2(i32 %a, i32 %b) { +    %tmp = icmp eq i32 %a, %b +    ret i1 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-eor.ll b/test/CodeGen/Thumb2/thumb2-eor.ll new file mode 100644 index 0000000000000..ec98f645d6c92 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-eor.ll @@ -0,0 +1,6 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {eor\\W*r\[0-9\],\\W*r\[0-9\],\\W*r\[0-9\]} | count 1 + +define i32 @f1(i32 %a, i32 %b) { +    %tmp = xor i32 %a, %b +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-eor2.ll b/test/CodeGen/Thumb2/thumb2-eor2.ll new file mode 100644 index 0000000000000..11784ca02c144 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-eor2.ll @@ -0,0 +1,31 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep "eor "  | grep {#187\\|#11141290\\|#3422604288\\|#1114112\\|#3722304989} | count 5 + +; 0x000000bb = 187 +define i32 @f1(i32 %a) { +    %tmp = xor i32 %a, 187 +    ret i32 %tmp +} + +; 0x00aa00aa = 11141290 +define i32 @f2(i32 %a) { +    %tmp = xor i32 %a, 11141290  +    ret i32 %tmp +} + +; 0xcc00cc00 = 3422604288 +define i32 @f3(i32 %a) { +    %tmp = xor i32 %a, 3422604288 +    ret i32 %tmp +} + +; 0xdddddddd = 3722304989 +define i32 @f4(i32 %a) { +    %tmp = xor i32 %a, 3722304989 +    ret i32 %tmp +} + +; 0x00110000 = 1114112 +define i32 @f5(i32 %a) { +    %tmp = xor i32 %a, 1114112 +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-lsl.ll b/test/CodeGen/Thumb2/thumb2-lsl.ll new file mode 100644 index 0000000000000..666963a4b4998 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-lsl.ll @@ -0,0 +1,6 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {lsl\\W*r\[0-9\],\\W*r\[0-9\],\\W*\[0-9\]} | count 1 + +define i32 @f1(i32 %a) { +    %tmp = shl i32 %a, 5 +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-lsl2.ll b/test/CodeGen/Thumb2/thumb2-lsl2.ll new file mode 100644 index 0000000000000..eb7a2795343d6 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-lsl2.ll @@ -0,0 +1,6 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {lsl\\W*r\[0-9\],\\W*r\[0-9\],\\W*r\[0-9\]} | count 1 + +define i32 @f1(i32 %a, i32 %b) { +    %tmp = shl i32 %a, %b +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-lsr.ll b/test/CodeGen/Thumb2/thumb2-lsr.ll new file mode 100644 index 0000000000000..cf4d2f81c55d9 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-lsr.ll @@ -0,0 +1,6 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {lsr\\W*r\[0-9\],\\W*r\[0-9\],\\W*\[0-9\]} | count 1 + +define i32 @f1(i32 %a) { +    %tmp = lshr i32 %a, 13 +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-lsr2.ll b/test/CodeGen/Thumb2/thumb2-lsr2.ll new file mode 100644 index 0000000000000..01fd56d52c175 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-lsr2.ll @@ -0,0 +1,6 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {lsr\\W*r\[0-9\],\\W*r\[0-9\],\\W*r\[0-9\]} | count 1 + +define i32 @f1(i32 %a, i32 %b) { +    %tmp = lshr i32 %a, %b +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-mla.ll b/test/CodeGen/Thumb2/thumb2-mla.ll new file mode 100644 index 0000000000000..0772d7f69ad5d --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-mla.ll @@ -0,0 +1,13 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {mla\\W*r\[0-9\],\\W*r\[0-9\],\\W*r\[0-9\],\\W*r\[0-9\]} | count 2 + +define i32 @f1(i32 %a, i32 %b, i32 %c) { +    %tmp1 = mul i32 %a, %b +    %tmp2 = add i32 %c, %tmp1 +    ret i32 %tmp2 +} + +define i32 @f2(i32 %a, i32 %b, i32 %c) { +    %tmp1 = mul i32 %a, %b +    %tmp2 = add i32 %tmp1, %c +    ret i32 %tmp2 +} diff --git a/test/CodeGen/Thumb2/thumb2-mls.ll b/test/CodeGen/Thumb2/thumb2-mls.ll new file mode 100644 index 0000000000000..6d1640f340ae5 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-mls.ll @@ -0,0 +1,14 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {mls\\W*r\[0-9\],\\W*r\[0-9\],\\W*r\[0-9\],\\W*r\[0-9\]} | count 1 + +define i32 @f1(i32 %a, i32 %b, i32 %c) { +    %tmp1 = mul i32 %a, %b +    %tmp2 = sub i32 %c, %tmp1 +    ret i32 %tmp2 +} + +; sub doesn't commute, so no mls for this one +define i32 @f2(i32 %a, i32 %b, i32 %c) { +    %tmp1 = mul i32 %a, %b +    %tmp2 = sub i32 %tmp1, %c +    ret i32 %tmp2 +} diff --git a/test/CodeGen/ARM/thumb2-mov.ll b/test/CodeGen/Thumb2/thumb2-mov.ll index 0c4c59689b600..0c4c59689b600 100644 --- a/test/CodeGen/ARM/thumb2-mov.ll +++ b/test/CodeGen/Thumb2/thumb2-mov.ll diff --git a/test/CodeGen/ARM/thumb2-mov2.ll b/test/CodeGen/Thumb2/thumb2-mov2.ll index d2f8c0b91a58c..d2f8c0b91a58c 100644 --- a/test/CodeGen/ARM/thumb2-mov2.ll +++ b/test/CodeGen/Thumb2/thumb2-mov2.ll diff --git a/test/CodeGen/Thumb2/thumb2-mov3.ll b/test/CodeGen/Thumb2/thumb2-mov3.ll new file mode 100644 index 0000000000000..74418c1000c94 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-mov3.ll @@ -0,0 +1,31 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {mov\\W*r\[0-9\],\\W*#\[0-9\]*} | grep {#171\\|#1179666\\|#872428544\\|#1448498774\\|#66846720} | count 5 + +; 171 = 0x000000ab +define i32 @f1(i32 %a) { +    %tmp = add i32 0, 171 +    ret i32 %tmp +} + +; 1179666 = 0x00120012 +define i32 @f2(i32 %a) { +    %tmp = add i32 0, 1179666 +    ret i32 %tmp +} + +; 872428544 = 0x34003400 +define i32 @f3(i32 %a) { +    %tmp = add i32 0, 872428544 +    ret i32 %tmp +} + +; 1448498774 = 0x56565656 +define i32 @f4(i32 %a) { +    %tmp = add i32 0, 1448498774 +    ret i32 %tmp +} + +; 66846720 = 0x03fc0000 +define i32 @f5(i32 %a) { +    %tmp = add i32 0, 66846720 +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-mov4.ll b/test/CodeGen/Thumb2/thumb2-mov4.ll new file mode 100644 index 0000000000000..74c522f94f07b --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-mov4.ll @@ -0,0 +1,6 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {movw\\W*r\[0-9\],\\W*#\[0-9\]*} | grep {#65535} | count 1 + +define i32 @f6(i32 %a) { +    %tmp = add i32 0, 65535 +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-mul.ll b/test/CodeGen/Thumb2/thumb2-mul.ll new file mode 100644 index 0000000000000..e976e66c00137 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-mul.ll @@ -0,0 +1,6 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {mul\\W*r\[0-9\],\\W*r\[0-9\],\\W*r\[0-9\]} | count 1 + +define i32 @f1(i32 %a, i32 %b, i32 %c) { +    %tmp = mul i32 %a, %b +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-mvn.ll b/test/CodeGen/Thumb2/thumb2-mvn.ll new file mode 100644 index 0000000000000..95694d67912e1 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-mvn.ll @@ -0,0 +1,27 @@ +; RUN: llvm-as < %s | llc | grep {mvn\\W*r\[0-9\],\\W*#\[0-9\]*} | grep {#187\\|#11141290\\|#3422604288\\|#1114112} | count 4 + +target triple = "thumbv7-apple-darwin" + +; 0x000000bb = 187 +define i32 @f1(i32 %a) { +    %tmp = xor i32 4294967295, 187 +    ret i32 %tmp +} + +; 0x00aa00aa = 11141290 +define i32 @f2(i32 %a) { +    %tmp = xor i32 4294967295, 11141290  +    ret i32 %tmp +} + +; 0xcc00cc00 = 3422604288 +define i32 @f3(i32 %a) { +    %tmp = xor i32 4294967295, 3422604288 +    ret i32 %tmp +} + +; 0x00110000 = 1114112 +define i32 @f5(i32 %a) { +    %tmp = xor i32 4294967295, 1114112 +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-mvn2.ll b/test/CodeGen/Thumb2/thumb2-mvn2.ll new file mode 100644 index 0000000000000..178f02b9e7622 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-mvn2.ll @@ -0,0 +1,11 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {mvn\\W*r\[0-9\]*,\\W*r\[0-9\]*} | count 2 + +define i32 @f1(i32 %a) { +    %tmp = xor i32 4294967295, %a +    ret i32 %tmp +} + +define i32 @f2(i32 %a) { +    %tmp = xor i32 %a, 4294967295 +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-neg.ll b/test/CodeGen/Thumb2/thumb2-neg.ll new file mode 100644 index 0000000000000..8f938d579b837 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-neg.ll @@ -0,0 +1,6 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {rsb\\W*r\[0-9\],\\W*r\[0-9\],\\W*#0} | count 1 + +define i32 @f1(i32 %a) { +    %tmp = sub i32 0, %a +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-orn.ll b/test/CodeGen/Thumb2/thumb2-orn.ll new file mode 100644 index 0000000000000..1add347ef3093 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-orn.ll @@ -0,0 +1,25 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {orn\\W*r\[0-9\]*,\\W*r\[0-9\]*,\\W*r\[0-9\]*} | count 4 + +define i32 @f1(i32 %a, i32 %b) { +    %tmp = xor i32 %b, 4294967295 +    %tmp1 = or i32 %a, %tmp +    ret i32 %tmp1 +} + +define i32 @f2(i32 %a, i32 %b) { +    %tmp = xor i32 %b, 4294967295 +    %tmp1 = or i32 %tmp, %a +    ret i32 %tmp1 +} + +define i32 @f3(i32 %a, i32 %b) { +    %tmp = xor i32 4294967295, %b +    %tmp1 = or i32 %a, %tmp +    ret i32 %tmp1 +} + +define i32 @f4(i32 %a, i32 %b) { +    %tmp = xor i32 4294967295, %b +    %tmp1 = or i32 %tmp, %a +    ret i32 %tmp1 +} diff --git a/test/CodeGen/Thumb2/thumb2-orn2.ll b/test/CodeGen/Thumb2/thumb2-orn2.ll new file mode 100644 index 0000000000000..7758edd1d6938 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-orn2.ll @@ -0,0 +1,29 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {orn\\W*r\[0-9\]*,\\W*r\[0-9\]*,\\W*#\[0-9\]*} | grep {#187\\|#11141290\\|#3422604288\\|#1114112} | count 4 + +; 0x000000bb = 187 +define i32 @f1(i32 %a) { +    %tmp1 = xor i32 4294967295, 187 +    %tmp2 = or i32 %a, %tmp1 +    ret i32 %tmp2 +} + +; 0x00aa00aa = 11141290 +define i32 @f2(i32 %a) { +    %tmp1 = xor i32 4294967295, 11141290  +    %tmp2 = or i32 %a, %tmp1 +    ret i32 %tmp2 +} + +; 0xcc00cc00 = 3422604288 +define i32 @f3(i32 %a) { +    %tmp1 = xor i32 4294967295, 3422604288 +    %tmp2 = or i32 %a, %tmp1 +    ret i32 %tmp2 +} + +; 0x00110000 = 1114112 +define i32 @f5(i32 %a) { +    %tmp1 = xor i32 4294967295, 1114112 +    %tmp2 = or i32 %a, %tmp1 +    ret i32 %tmp2 +} diff --git a/test/CodeGen/Thumb2/thumb2-orr.ll b/test/CodeGen/Thumb2/thumb2-orr.ll new file mode 100644 index 0000000000000..922294638c26d --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-orr.ll @@ -0,0 +1,6 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {orr\\W*r\[0-9\]*,\\W*r\[0-9\]*,\\W*r\[0-9\]*} | count 1 + +define i32 @f1(i32 %a, i32 %b) { +    %tmp2 = or i32 %a, %b +    ret i32 %tmp2 +} diff --git a/test/CodeGen/Thumb2/thumb2-orr2.ll b/test/CodeGen/Thumb2/thumb2-orr2.ll new file mode 100644 index 0000000000000..6f2b62c00c6e3 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-orr2.ll @@ -0,0 +1,31 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {orr\\W*r\[0-9\]*,\\W*r\[0-9\]*,\\W*#\[0-9\]*} | grep {#187\\|#11141290\\|#3422604288\\|#1145324612\\|#1114112} | count 5 + +; 0x000000bb = 187 +define i32 @f1(i32 %a) { +    %tmp2 = or i32 %a, 187 +    ret i32 %tmp2 +} + +; 0x00aa00aa = 11141290 +define i32 @f2(i32 %a) { +    %tmp2 = or i32 %a, 11141290  +    ret i32 %tmp2 +} + +; 0xcc00cc00 = 3422604288 +define i32 @f3(i32 %a) { +    %tmp2 = or i32 %a, 3422604288 +    ret i32 %tmp2 +} + +; 0x44444444 = 1145324612 +define i32 @f4(i32 %a) { +    %tmp2 = or i32 %a, 1145324612 +    ret i32 %tmp2 +} + +; 0x00110000 = 1114112 +define i32 @f5(i32 %a) { +    %tmp2 = or i32 %a, 1114112 +    ret i32 %tmp2 +} diff --git a/test/CodeGen/Thumb2/thumb2-rev.ll b/test/CodeGen/Thumb2/thumb2-rev.ll new file mode 100644 index 0000000000000..4009da33b2607 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-rev.ll @@ -0,0 +1,8 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2,+v7a | grep {rev\\W*r\[0-9\]*,\\W*r\[0-9\]*} | count 1 + +define i32 @f1(i32 %a) { +    %tmp = tail call i32 @llvm.bswap.i32(i32 %a) +    ret i32 %tmp +} + +declare i32 @llvm.bswap.i32(i32) nounwind readnone diff --git a/test/CodeGen/Thumb2/thumb2-ror.ll b/test/CodeGen/Thumb2/thumb2-ror.ll new file mode 100644 index 0000000000000..305ab994518dd --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-ror.ll @@ -0,0 +1,8 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {ror\\W*r\[0-9\]*,\\W*r\[0-9\]*,\\W*#\[0-9\]*} | grep 22 | count 1 + +define i32 @f1(i32 %a) { +    %l8 = shl i32 %a, 10 +    %r8 = lshr i32 %a, 22 +    %tmp = or i32 %l8, %r8 +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-ror2.ll b/test/CodeGen/Thumb2/thumb2-ror2.ll new file mode 100644 index 0000000000000..dd19b0afb18ff --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-ror2.ll @@ -0,0 +1,9 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {ror\\W*r\[0-9\]*,\\W*r\[0-9\]*,\\W*r\[0-9\]*} | count 1 + +define i32 @f1(i32 %a, i32 %b) { +    %db = sub i32 32, %b +    %l8 = shl i32 %a, %b +    %r8 = lshr i32 %a, %db +    %tmp = or i32 %l8, %r8 +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-rsb.ll b/test/CodeGen/Thumb2/thumb2-rsb.ll new file mode 100644 index 0000000000000..934e37713d710 --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-rsb.ll @@ -0,0 +1,9 @@ +; XFAIL: * +; this will match as "sub" until we get register shifting + +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {rsb\\W*r\[0-9\],\\W*r\[0-9\],\\W*r\[0-9\]*} | count 1 + +define i32 @f1(i32 %a, i32 %b) { +    %tmp = sub i32 %b, %a +    ret i32 %tmp +} diff --git a/test/CodeGen/Thumb2/thumb2-rsb2.ll b/test/CodeGen/Thumb2/thumb2-rsb2.ll new file mode 100644 index 0000000000000..957d1d0717e4f --- /dev/null +++ b/test/CodeGen/Thumb2/thumb2-rsb2.ll @@ -0,0 +1,31 @@ +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep {rsb\\W*r\[0-9\],\\W*r\[0-9\],\\W*#\[0-9\]*} | grep {#171\\|#1179666\\|#872428544\\|#1448498774\\|#66846720} | count 5 + +; 171 = 0x000000ab +define i32 @f1(i32 %a) { +    %tmp = sub i32 171, %a +    ret i32 %tmp +} + +; 1179666 = 0x00120012 +define i32 @f2(i32 %a) { +    %tmp = sub i32 1179666, %a +    ret i32 %tmp +} + +; 872428544 = 0x34003400 +define i32 @f3(i32 %a) { +    %tmp = sub i32 872428544, %a +    ret i32 %tmp +} + +; 1448498774 = 0x56565656 +define i32 @f4(i32 %a) { +    %tmp = sub i32 1448498774, %a +    ret i32 %tmp +} + +; 66846720 = 0x03fc0000 +define i32 @f5(i32 %a) { +    %tmp = sub i32 66846720, %a +    ret i32 %tmp +} diff --git a/test/CodeGen/ARM/thumb2-shifter.ll b/test/CodeGen/Thumb2/thumb2-shifter.ll index f9ec5067ec016..9bd6e43101a89 100644 --- a/test/CodeGen/ARM/thumb2-shifter.ll +++ b/test/CodeGen/Thumb2/thumb2-shifter.ll @@ -2,7 +2,7 @@  ; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep lsr  ; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep asr  ; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep ror -; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | grep mov +; RUN: llvm-as < %s | llc -march=thumb -mattr=+thumb2 | not grep mov  define i32 @t2ADDrs_lsl(i32 %X, i32 %Y) {          %A = shl i32 %Y, 16 diff --git a/test/CodeGen/X86/constpool.ll b/test/CodeGen/X86/constpool.ll new file mode 100644 index 0000000000000..60d51e56c3b40 --- /dev/null +++ b/test/CodeGen/X86/constpool.ll @@ -0,0 +1,16 @@ +; RUN: llvm-as < %s | llc  +; RUN: llvm-as < %s | llc -fast-isel +; RUN: llvm-as < %s | llc -march=x86-64 +; RUN: llvm-as < %s | llc -fast-isel -march=x86-64 +; PR4466 + +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128" +target triple = "i386-apple-darwin9.7" + +define i32 @main() nounwind { +entry: +	%0 = fcmp oeq float undef, 0x7FF0000000000000		; <i1> [#uses=1] +	%1 = zext i1 %0 to i32		; <i32> [#uses=1] +	store i32 %1, i32* undef, align 4 +	ret i32 undef +} diff --git a/test/CodeGen/X86/inline-asm-modifier-n.ll b/test/CodeGen/X86/inline-asm-modifier-n.ll new file mode 100644 index 0000000000000..97eac388677b3 --- /dev/null +++ b/test/CodeGen/X86/inline-asm-modifier-n.ll @@ -0,0 +1,8 @@ +; RUN: llvm-as < %s | llc -march=x86 | grep { 37} +; rdar://7008959 + +define void @bork() nounwind { +entry: +	tail call void asm sideeffect "BORK ${0:n}", "i,~{dirflag},~{fpsr},~{flags}"(i32 -37) nounwind +	ret void +} diff --git a/test/CodeGen/X86/inline-asm-tied.ll b/test/CodeGen/X86/inline-asm-tied.ll new file mode 100644 index 0000000000000..6df2c48415bc7 --- /dev/null +++ b/test/CodeGen/X86/inline-asm-tied.ll @@ -0,0 +1,19 @@ +; RUN: llvm-as < %s | llc -mtriple=i386-apple-darwin9 -O0 | grep {movl	%edx, 4(%esp)} | count 2 +; rdar://6992609 + +target triple = "i386-apple-darwin9.0" +@llvm.used = appending global [1 x i8*] [i8* bitcast (i64 (i64)* @_OSSwapInt64 to i8*)], section "llvm.metadata"		; <[1 x i8*]*> [#uses=0] + +define i64 @_OSSwapInt64(i64 %_data) nounwind { +entry: +	%retval = alloca i64		; <i64*> [#uses=2] +	%_data.addr = alloca i64		; <i64*> [#uses=4] +	store i64 %_data, i64* %_data.addr +	%tmp = load i64* %_data.addr		; <i64> [#uses=1] +	%0 = call i64 asm "bswap   %eax\0A\09bswap   %edx\0A\09xchgl   %eax, %edx", "=A,0,~{dirflag},~{fpsr},~{flags}"(i64 %tmp) nounwind		; <i64> [#uses=1] +	store i64 %0, i64* %_data.addr +	%tmp1 = load i64* %_data.addr		; <i64> [#uses=1] +	store i64 %tmp1, i64* %retval +	%1 = load i64* %retval		; <i64> [#uses=1] +	ret i64 %1 +} diff --git a/test/CodeGen/X86/pic-1.ll b/test/CodeGen/X86/pic-1.ll index ab07718ad237f..7bd59dc0f3efa 100644 --- a/test/CodeGen/X86/pic-1.ll +++ b/test/CodeGen/X86/pic-1.ll @@ -9,7 +9,7 @@  @dst = external global i32   @src = external global i32  -define void @foo() { +define void @foo() nounwind {  entry:      store i32* @dst, i32** @ptr      %tmp.s = load i32* @src diff --git a/test/CodeGen/X86/pic-jtbl.ll b/test/CodeGen/X86/pic-jtbl.ll index e23f7c1a9fc23..6096592e17771 100644 --- a/test/CodeGen/X86/pic-jtbl.ll +++ b/test/CodeGen/X86/pic-jtbl.ll @@ -6,7 +6,10 @@  ; RUN: grep GOTOFF %t | count 14  ; RUN: grep JTI %t | count 2 -define void @bar(i32 %n.u) { +; X86-64: +; RUN: llvm-as < %s | llc -mtriple=x86_64-pc-linux-gnu -relocation-model=pic > %t +; RUN: grep {LJTI1_0(%rip)} %t +define void @bar(i32 %n.u) nounwind {  entry:      switch i32 %n.u, label %bb12 [i32 1, label %bb i32 2, label %bb6 i32 4, label %bb7 i32 5, label %bb8 i32 6, label %bb10 i32 7, label %bb1 i32 8, label %bb3 i32 9, label %bb4 i32 10, label %bb9 i32 11, label %bb2 i32 12, label %bb5 i32 13, label %bb11 ]  bb: diff --git a/test/CodeGen/X86/pic_jumptable.ll b/test/CodeGen/X86/pic_jumptable.ll index 229865bb71b9c..04245d149a8c7 100644 --- a/test/CodeGen/X86/pic_jumptable.ll +++ b/test/CodeGen/X86/pic_jumptable.ll @@ -6,7 +6,7 @@  declare void @_Z3bari(i32) -define linkonce void @_Z3fooILi1EEvi(i32 %Y) { +define linkonce void @_Z3fooILi1EEvi(i32 %Y) nounwind {  entry:  	%Y_addr = alloca i32		; <i32*> [#uses=2]  	%"alloca point" = bitcast i32 0 to i32		; <i32> [#uses=0] diff --git a/test/CodeGen/X86/pr3495.ll b/test/CodeGen/X86/pr3495.ll index 62382c6d78c76..ca6204c101e9a 100644 --- a/test/CodeGen/X86/pr3495.ll +++ b/test/CodeGen/X86/pr3495.ll @@ -1,6 +1,6 @@  ; RUN: llvm-as < %s | llc -march=x86 -stats |& grep {Number of reloads omited} | grep 2  ; RUN: llvm-as < %s | llc -march=x86 -stats |& not grep {Number of available reloads turned into copies} -; RUN: llvm-as < %s | llc -march=x86 -stats |& grep {Number of machine instrs printed} | grep 38 +; RUN: llvm-as < %s | llc -march=x86 -stats |& grep {Number of machine instrs printed} | grep 39  ; PR3495  ; The loop reversal kicks in once here, resulting in one fewer instruction. diff --git a/test/CodeGen/X86/remat-constant.ll b/test/CodeGen/X86/remat-constant.ll index 4c983b014883b..8dfed5ed52e25 100644 --- a/test/CodeGen/X86/remat-constant.ll +++ b/test/CodeGen/X86/remat-constant.ll @@ -1,4 +1,4 @@ -; RUN: llvm-as < %s | llc -mtriple=x86_64-linux -relocation-model=static -aggressive-remat | grep xmm | count 2 +; RUN: llvm-as < %s | llc -mtriple=x86_64-linux -relocation-model=static | grep xmm | count 2  declare void @bar() nounwind diff --git a/test/CodeGen/X86/scev-interchange.ll b/test/CodeGen/X86/scev-interchange.ll new file mode 100644 index 0000000000000..b253dd975ff0e --- /dev/null +++ b/test/CodeGen/X86/scev-interchange.ll @@ -0,0 +1,386 @@ +; RUN: llvm-as < %s | llc -march=x86-64 + +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128" +	%struct..0__pthread_mutex_s = type { i32, i32, i32, i32, i32, i32, %struct.__pthread_list_t } +	%"struct.DataOutBase::GmvFlags" = type { i32 } +	%"struct.FE_DGPNonparametric<3>" = type { [1156 x i8], i32, %"struct.PolynomialSpace<1>" } +	%"struct.FE_Q<3>" = type { %"struct.FE_DGPNonparametric<3>", %"struct.std::vector<int,std::allocator<int> >" } +	%"struct.FiniteElementData<1>" = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } +	%struct.Line = type { [2 x i32] } +	%"struct.PolynomialSpace<1>" = type { %"struct.std::vector<Polynomials::Polynomial<double>,std::allocator<Polynomials::Polynomial<double> > >", i32, %"struct.std::vector<int,std::allocator<int> >", %"struct.std::vector<int,std::allocator<int> >" } +	%"struct.Polynomials::Polynomial<double>" = type { %struct.Subscriptor, %"struct.std::vector<double,std::allocator<double> >" } +	%struct.Subscriptor = type { i32 (...)**, i32, %"struct.std::type_info"* } +	%"struct.TableBase<2,double>" = type { %struct.Subscriptor, double*, i32, %"struct.TableIndices<2>" } +	%"struct.TableIndices<2>" = type { %struct.Line } +	%struct.__pthread_list_t = type { %struct.__pthread_list_t*, %struct.__pthread_list_t* } +	%struct.pthread_attr_t = type { i64, [48 x i8] } +	%struct.pthread_mutex_t = type { %struct..0__pthread_mutex_s } +	%"struct.std::_Bit_const_iterator" = type { %"struct.std::_Bit_iterator_base" } +	%"struct.std::_Bit_iterator_base" = type { i64*, i32 } +	%"struct.std::_Bvector_base<std::allocator<bool> >" = type { %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl" } +	%"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl" = type { %"struct.std::_Bit_const_iterator", %"struct.std::_Bit_const_iterator", i64* } +	%"struct.std::_Vector_base<Polynomials::Polynomial<double>,std::allocator<Polynomials::Polynomial<double> > >" = type { %"struct.std::_Vector_base<Polynomials::Polynomial<double>,std::allocator<Polynomials::Polynomial<double> > >::_Vector_impl" } +	%"struct.std::_Vector_base<Polynomials::Polynomial<double>,std::allocator<Polynomials::Polynomial<double> > >::_Vector_impl" = type { %"struct.Polynomials::Polynomial<double>"*, %"struct.Polynomials::Polynomial<double>"*, %"struct.Polynomials::Polynomial<double>"* } +	%"struct.std::_Vector_base<double,std::allocator<double> >" = type { %"struct.std::_Vector_base<double,std::allocator<double> >::_Vector_impl" } +	%"struct.std::_Vector_base<double,std::allocator<double> >::_Vector_impl" = type { double*, double*, double* } +	%"struct.std::_Vector_base<int,std::allocator<int> >" = type { %"struct.std::_Vector_base<int,std::allocator<int> >::_Vector_impl" } +	%"struct.std::_Vector_base<int,std::allocator<int> >::_Vector_impl" = type { i32*, i32*, i32* } +	%"struct.std::_Vector_base<std::vector<bool, std::allocator<bool> >,std::allocator<std::vector<bool, std::allocator<bool> > > >" = type { %"struct.std::_Vector_base<std::vector<bool, std::allocator<bool> >,std::allocator<std::vector<bool, std::allocator<bool> > > >::_Vector_impl" } +	%"struct.std::_Vector_base<std::vector<bool, std::allocator<bool> >,std::allocator<std::vector<bool, std::allocator<bool> > > >::_Vector_impl" = type { %"struct.std::vector<bool,std::allocator<bool> >"*, %"struct.std::vector<bool,std::allocator<bool> >"*, %"struct.std::vector<bool,std::allocator<bool> >"* } +	%"struct.std::type_info" = type { i32 (...)**, i8* } +	%"struct.std::vector<Polynomials::Polynomial<double>,std::allocator<Polynomials::Polynomial<double> > >" = type { %"struct.std::_Vector_base<Polynomials::Polynomial<double>,std::allocator<Polynomials::Polynomial<double> > >" } +	%"struct.std::vector<bool,std::allocator<bool> >" = type { %"struct.std::_Bvector_base<std::allocator<bool> >" } +	%"struct.std::vector<double,std::allocator<double> >" = type { %"struct.std::_Vector_base<double,std::allocator<double> >" } +	%"struct.std::vector<int,std::allocator<int> >" = type { %"struct.std::_Vector_base<int,std::allocator<int> >" } +	%"struct.std::vector<std::vector<bool, std::allocator<bool> >,std::allocator<std::vector<bool, std::allocator<bool> > > >" = type { %"struct.std::_Vector_base<std::vector<bool, std::allocator<bool> >,std::allocator<std::vector<bool, std::allocator<bool> > > >" } + +@_ZL20__gthrw_pthread_oncePiPFvvE = alias weak i32 (i32*, void ()*)* @pthread_once		; <i32 (i32*, void ()*)*> [#uses=0] +@_ZL27__gthrw_pthread_getspecificj = alias weak i8* (i32)* @pthread_getspecific		; <i8* (i32)*> [#uses=0] +@_ZL27__gthrw_pthread_setspecificjPKv = alias weak i32 (i32, i8*)* @pthread_setspecific		; <i32 (i32, i8*)*> [#uses=0] +@_ZL22__gthrw_pthread_createPmPK14pthread_attr_tPFPvS3_ES3_ = alias weak i32 (i64*, %struct.pthread_attr_t*, i8* (i8*)*, i8*)* @pthread_create		; <i32 (i64*, %struct.pthread_attr_t*, i8* (i8*)*, i8*)*> [#uses=0] +@_ZL22__gthrw_pthread_cancelm = alias weak i32 (i64)* @pthread_cancel		; <i32 (i64)*> [#uses=0] +@_ZL26__gthrw_pthread_mutex_lockP15pthread_mutex_t = alias weak i32 (%struct.pthread_mutex_t*)* @pthread_mutex_lock		; <i32 (%struct.pthread_mutex_t*)*> [#uses=0] +@_ZL29__gthrw_pthread_mutex_trylockP15pthread_mutex_t = alias weak i32 (%struct.pthread_mutex_t*)* @pthread_mutex_trylock		; <i32 (%struct.pthread_mutex_t*)*> [#uses=0] +@_ZL28__gthrw_pthread_mutex_unlockP15pthread_mutex_t = alias weak i32 (%struct.pthread_mutex_t*)* @pthread_mutex_unlock		; <i32 (%struct.pthread_mutex_t*)*> [#uses=0] +@_ZL26__gthrw_pthread_mutex_initP15pthread_mutex_tPK19pthread_mutexattr_t = alias weak i32 (%struct.pthread_mutex_t*, %"struct.DataOutBase::GmvFlags"*)* @pthread_mutex_init		; <i32 (%struct.pthread_mutex_t*, %"struct.DataOutBase::GmvFlags"*)*> [#uses=0] +@_ZL26__gthrw_pthread_key_createPjPFvPvE = alias weak i32 (i32*, void (i8*)*)* @pthread_key_create		; <i32 (i32*, void (i8*)*)*> [#uses=0] +@_ZL26__gthrw_pthread_key_deletej = alias weak i32 (i32)* @pthread_key_delete		; <i32 (i32)*> [#uses=0] +@_ZL30__gthrw_pthread_mutexattr_initP19pthread_mutexattr_t = alias weak i32 (%"struct.DataOutBase::GmvFlags"*)* @pthread_mutexattr_init		; <i32 (%"struct.DataOutBase::GmvFlags"*)*> [#uses=0] +@_ZL33__gthrw_pthread_mutexattr_settypeP19pthread_mutexattr_ti = alias weak i32 (%"struct.DataOutBase::GmvFlags"*, i32)* @pthread_mutexattr_settype		; <i32 (%"struct.DataOutBase::GmvFlags"*, i32)*> [#uses=0] +@_ZL33__gthrw_pthread_mutexattr_destroyP19pthread_mutexattr_t = alias weak i32 (%"struct.DataOutBase::GmvFlags"*)* @pthread_mutexattr_destroy		; <i32 (%"struct.DataOutBase::GmvFlags"*)*> [#uses=0] + +declare void @_Unwind_Resume(i8*) + +declare i8* @_Znwm(i64) + +declare fastcc void @_ZNSt6vectorIjSaIjEEaSERKS1_(%"struct.std::vector<int,std::allocator<int> >"*, %"struct.std::vector<int,std::allocator<int> >"*) + +declare fastcc void @_ZN9TableBaseILi2EdE6reinitERK12TableIndicesILi2EE(%"struct.TableBase<2,double>"* nocapture, i32, i32) + +declare fastcc void @_ZNSt6vectorIbSaIbEEC1EmRKbRKS0_(%"struct.std::vector<bool,std::allocator<bool> >"* nocapture, i64, i8* nocapture) + +declare fastcc void @_ZNSt6vectorIS_IbSaIbEESaIS1_EEC2EmRKS1_RKS2_(%"struct.std::vector<std::vector<bool, std::allocator<bool> >,std::allocator<std::vector<bool, std::allocator<bool> > > >"* nocapture, i64, %"struct.std::vector<bool,std::allocator<bool> >"* nocapture) + +declare fastcc void @_ZNSt6vectorIN11Polynomials10PolynomialIdEESaIS2_EED1Ev(%"struct.std::vector<Polynomials::Polynomial<double>,std::allocator<Polynomials::Polynomial<double> > >"* nocapture) + +declare fastcc void @_ZN24TensorProductPolynomialsILi3EEC2IN11Polynomials10PolynomialIdEEEERKSt6vectorIT_SaIS6_EE(%"struct.PolynomialSpace<1>"* nocapture, %"struct.std::vector<Polynomials::Polynomial<double>,std::allocator<Polynomials::Polynomial<double> > >"* nocapture) + +declare fastcc void @_ZN7FE_PolyI24TensorProductPolynomialsILi3EELi3EEC2EjRKS1_RK17FiniteElementDataILi3EERKSt6vectorIbSaIbEERKS9_ISB_SaISB_EE(%"struct.FE_DGPNonparametric<3>"*, i32, %"struct.PolynomialSpace<1>"* nocapture, %"struct.FiniteElementData<1>"* nocapture, %"struct.std::vector<bool,std::allocator<bool> >"* nocapture, %"struct.std::vector<std::vector<bool, std::allocator<bool> >,std::allocator<std::vector<bool, std::allocator<bool> > > >"* nocapture) + +declare fastcc void @_ZN11FE_Q_Helper12_GLOBAL__N_116invert_numberingERKSt6vectorIjSaIjEE(%"struct.std::vector<int,std::allocator<int> >"* noalias nocapture sret, %"struct.std::vector<int,std::allocator<int> >"* nocapture) + +declare fastcc void @_ZN4FE_QILi3EE14get_dpo_vectorEj(%"struct.std::vector<int,std::allocator<int> >"* noalias nocapture sret, i32) + +define fastcc void @_ZN4FE_QILi3EEC1Ej(%"struct.FE_Q<3>"* %this, i32 %degree) { +entry: +	invoke fastcc void @_ZNSt6vectorIbSaIbEEC1EmRKbRKS0_(%"struct.std::vector<bool,std::allocator<bool> >"* undef, i64 1, i8* undef) +			to label %invcont.i unwind label %lpad.i + +invcont.i:		; preds = %entry +	invoke fastcc void @_ZN4FE_QILi3EE14get_dpo_vectorEj(%"struct.std::vector<int,std::allocator<int> >"* noalias sret undef, i32 %degree) +			to label %invcont1.i unwind label %lpad120.i + +invcont1.i:		; preds = %invcont.i +	invoke fastcc void @_ZNSt6vectorIS_IbSaIbEESaIS1_EEC2EmRKS1_RKS2_(%"struct.std::vector<std::vector<bool, std::allocator<bool> >,std::allocator<std::vector<bool, std::allocator<bool> > > >"* undef, i64 undef, %"struct.std::vector<bool,std::allocator<bool> >"* undef) +			to label %invcont3.i unwind label %lpad124.i + +invcont3.i:		; preds = %invcont1.i +	invoke fastcc void @_ZN4FE_QILi3EE14get_dpo_vectorEj(%"struct.std::vector<int,std::allocator<int> >"* noalias sret undef, i32 %degree) +			to label %invcont4.i unwind label %lpad128.i + +invcont4.i:		; preds = %invcont3.i +	invoke fastcc void @_ZNSt6vectorIbSaIbEEC1EmRKbRKS0_(%"struct.std::vector<bool,std::allocator<bool> >"* undef, i64 undef, i8* undef) +			to label %invcont6.i unwind label %lpad132.i + +invcont6.i:		; preds = %invcont4.i +	invoke fastcc void @_ZN4FE_QILi3EE14get_dpo_vectorEj(%"struct.std::vector<int,std::allocator<int> >"* noalias sret undef, i32 %degree) +			to label %invcont7.i unwind label %lpad136.i + +invcont7.i:		; preds = %invcont6.i +	invoke fastcc void @_ZN11Polynomials19LagrangeEquidistant23generate_complete_basisEj(%"struct.std::vector<Polynomials::Polynomial<double>,std::allocator<Polynomials::Polynomial<double> > >"* noalias sret undef, i32 %degree) +			to label %invcont9.i unwind label %lpad140.i + +invcont9.i:		; preds = %invcont7.i +	invoke fastcc void @_ZN24TensorProductPolynomialsILi3EEC2IN11Polynomials10PolynomialIdEEEERKSt6vectorIT_SaIS6_EE(%"struct.PolynomialSpace<1>"* undef, %"struct.std::vector<Polynomials::Polynomial<double>,std::allocator<Polynomials::Polynomial<double> > >"* undef) +			to label %invcont10.i unwind label %lpad144.i + +invcont10.i:		; preds = %invcont9.i +	invoke fastcc void @_ZN7FE_PolyI24TensorProductPolynomialsILi3EELi3EEC2EjRKS1_RK17FiniteElementDataILi3EERKSt6vectorIbSaIbEERKS9_ISB_SaISB_EE(%"struct.FE_DGPNonparametric<3>"* undef, i32 %degree, %"struct.PolynomialSpace<1>"* undef, %"struct.FiniteElementData<1>"* undef, %"struct.std::vector<bool,std::allocator<bool> >"* undef, %"struct.std::vector<std::vector<bool, std::allocator<bool> >,std::allocator<std::vector<bool, std::allocator<bool> > > >"* undef) +			to label %bb14.i unwind label %lpad148.i + +bb14.i:		; preds = %invcont10.i +	br i1 false, label %bb3.i164.i, label %bb.i.i.i.i160.i + +bb.i.i.i.i160.i:		; preds = %bb14.i +	unreachable + +bb3.i164.i:		; preds = %bb14.i +	br i1 undef, label %bb10.i168.i, label %bb.i.i.i20.i166.i + +bb.i.i.i20.i166.i:		; preds = %bb3.i164.i +	unreachable + +bb10.i168.i:		; preds = %bb3.i164.i +	invoke fastcc void @_ZNSt6vectorIN11Polynomials10PolynomialIdEESaIS2_EED1Ev(%"struct.std::vector<Polynomials::Polynomial<double>,std::allocator<Polynomials::Polynomial<double> > >"* undef) +			to label %bb21.i unwind label %lpad144.i + +bb21.i:		; preds = %bb10.i168.i +	invoke fastcc void @_ZNSt6vectorIN11Polynomials10PolynomialIdEESaIS2_EED1Ev(%"struct.std::vector<Polynomials::Polynomial<double>,std::allocator<Polynomials::Polynomial<double> > >"* undef) +			to label %bb28.i unwind label %lpad140.i + +bb28.i:		; preds = %bb21.i +	br i1 undef, label %bb35.i, label %bb.i.i.i175.i + +bb.i.i.i175.i:		; preds = %bb28.i +	br label %bb35.i + +bb35.i:		; preds = %bb.i.i.i175.i, %bb28.i +	br i1 undef, label %bb42.i, label %bb.i.i.i205.i + +bb.i.i.i205.i:		; preds = %bb35.i +	unreachable + +bb42.i:		; preds = %bb35.i +	br i1 undef, label %bb47.i, label %bb.i.i.i213.i + +bb.i.i.i213.i:		; preds = %bb42.i +	unreachable + +bb47.i:		; preds = %bb42.i +	br i1 undef, label %bb59.i, label %bb.i.i.i247.i + +bb.i.i.i247.i:		; preds = %bb47.i +	unreachable + +bb59.i:		; preds = %bb47.i +	br i1 undef, label %bb66.i, label %bb.i.i.i255.i + +bb.i.i.i255.i:		; preds = %bb59.i +	unreachable + +bb66.i:		; preds = %bb59.i +	br i1 undef, label %bb71.i, label %bb.i.i.i262.i + +bb.i.i.i262.i:		; preds = %bb66.i +	br label %bb71.i + +bb71.i:		; preds = %bb.i.i.i262.i, %bb66.i +	%tmp11.i.i29.i.i.i.i.i.i = invoke i8* @_Znwm(i64 12) +			to label %_ZNSt12_Vector_baseIjSaIjEEC2EmRKS0_.exit.i.i.i.i.i unwind label %lpad.i.i.i.i.i.i		; <i8*> [#uses=0] + +lpad.i.i.i.i.i.i:		; preds = %bb71.i +	unreachable + +_ZNSt12_Vector_baseIjSaIjEEC2EmRKS0_.exit.i.i.i.i.i:		; preds = %bb71.i +	br i1 undef, label %_ZNSt6vectorIjSaIjEED1Ev.exit.i.i, label %bb.i.i.i.i94.i + +bb.i.i.i.i94.i:		; preds = %_ZNSt12_Vector_baseIjSaIjEEC2EmRKS0_.exit.i.i.i.i.i +	unreachable + +_ZNSt6vectorIjSaIjEED1Ev.exit.i.i:		; preds = %_ZNSt12_Vector_baseIjSaIjEEC2EmRKS0_.exit.i.i.i.i.i +	%tmp11.i.i29.i.i.i.i5.i.i = invoke i8* @_Znwm(i64 undef) +			to label %_ZNSt12_Vector_baseIjSaIjEEC2EmRKS0_.exit.i.i.i12.i.i unwind label %lpad.i.i.i.i8.i.i		; <i8*> [#uses=0] + +lpad.i.i.i.i8.i.i:		; preds = %_ZNSt6vectorIjSaIjEED1Ev.exit.i.i +	invoke void @_Unwind_Resume(i8* undef) +			to label %.noexc.i9.i.i unwind label %lpad.i19.i.i + +.noexc.i9.i.i:		; preds = %lpad.i.i.i.i8.i.i +	unreachable + +_ZNSt12_Vector_baseIjSaIjEEC2EmRKS0_.exit.i.i.i12.i.i:		; preds = %_ZNSt6vectorIjSaIjEED1Ev.exit.i.i +	br i1 undef, label %bb50.i.i.i, label %bb.i.i.i.i.i.i.i.i.i.i + +bb.i.i.i.i.i.i.i.i.i.i:		; preds = %bb.i.i.i.i.i.i.i.i.i.i, %_ZNSt12_Vector_baseIjSaIjEEC2EmRKS0_.exit.i.i.i12.i.i +	br i1 undef, label %bb50.i.i.i, label %bb.i.i.i.i.i.i.i.i.i.i + +bb50.i.i.i:		; preds = %bb.i.i.i.i.i.i.i.i.i.i, %_ZNSt12_Vector_baseIjSaIjEEC2EmRKS0_.exit.i.i.i12.i.i +	invoke fastcc void @_ZN11FE_Q_Helper12_GLOBAL__N_116invert_numberingERKSt6vectorIjSaIjEE(%"struct.std::vector<int,std::allocator<int> >"* noalias sret undef, %"struct.std::vector<int,std::allocator<int> >"* undef) +			to label %bb83.i unwind label %lpad188.i + +lpad.i19.i.i:		; preds = %lpad.i.i.i.i8.i.i +	unreachable + +bb83.i:		; preds = %bb50.i.i.i +	br i1 undef, label %invcont84.i, label %bb.i.i.i221.i + +bb.i.i.i221.i:		; preds = %bb83.i +	unreachable + +invcont84.i:		; preds = %bb83.i +	%tmp11.i.i29.i.i.i.i.i = invoke i8* @_Znwm(i64 undef) +			to label %_ZNSt12_Vector_baseIjSaIjEEC2EmRKS0_.exit.i.i.i.i unwind label %lpad.i.i.i.i315.i		; <i8*> [#uses=0] + +lpad.i.i.i.i315.i:		; preds = %invcont84.i +	invoke void @_Unwind_Resume(i8* undef) +			to label %.noexc.i316.i unwind label %lpad.i352.i + +.noexc.i316.i:		; preds = %lpad.i.i.i.i315.i +	unreachable + +_ZNSt12_Vector_baseIjSaIjEEC2EmRKS0_.exit.i.i.i.i:		; preds = %invcont84.i +	br i1 undef, label %bb50.i.i, label %bb.i.i.i.i.i.i.i.i320.i + +bb.i.i.i.i.i.i.i.i320.i:		; preds = %bb.i.i.i.i.i.i.i.i320.i, %_ZNSt12_Vector_baseIjSaIjEEC2EmRKS0_.exit.i.i.i.i +	br i1 undef, label %bb50.i.i, label %bb.i.i.i.i.i.i.i.i320.i + +bb50.i.i:		; preds = %bb.i.i.i.i.i.i.i.i320.i, %_ZNSt12_Vector_baseIjSaIjEEC2EmRKS0_.exit.i.i.i.i +	invoke fastcc void @_ZN11FE_Q_Helper12_GLOBAL__N_116invert_numberingERKSt6vectorIjSaIjEE(%"struct.std::vector<int,std::allocator<int> >"* noalias sret undef, %"struct.std::vector<int,std::allocator<int> >"* undef) +			to label %invcont86.i unwind label %lpad200.i + +lpad.i352.i:		; preds = %lpad.i.i.i.i315.i +	unreachable + +invcont86.i:		; preds = %bb50.i.i +	invoke fastcc void @_ZNSt6vectorIjSaIjEEaSERKS1_(%"struct.std::vector<int,std::allocator<int> >"* undef, %"struct.std::vector<int,std::allocator<int> >"* undef) +			to label %.noexc380.i unwind label %lpad204.i + +.noexc380.i:		; preds = %invcont86.i +	br i1 undef, label %bb100.i, label %bb.i.i.i198.i + +bb.i.i.i198.i:		; preds = %.noexc380.i +	unreachable + +bb100.i:		; preds = %.noexc380.i +	br i1 undef, label %invcont101.i, label %bb.i.i.i190.i + +bb.i.i.i190.i:		; preds = %bb100.i +	unreachable + +invcont101.i:		; preds = %bb100.i +	invoke fastcc void @_ZN9TableBaseILi2EdE6reinitERK12TableIndicesILi2EE(%"struct.TableBase<2,double>"* undef, i32 undef, i32 undef) +			to label %_ZN10FullMatrixIdEC1Ejj.exit.i.i unwind label %lpad.i.i.i.i.i + +lpad.i.i.i.i.i:		; preds = %invcont101.i +	unreachable + +_ZN10FullMatrixIdEC1Ejj.exit.i.i:		; preds = %invcont101.i +	invoke fastcc void @_ZN9TableBaseILi2EdE6reinitERK12TableIndicesILi2EE(%"struct.TableBase<2,double>"* undef, i32 undef, i32 undef) +			to label %_ZN10FullMatrixIdEC1Ejj.exit28.i.i unwind label %lpad.i.i.i27.i.i + +lpad.i.i.i27.i.i:		; preds = %_ZN10FullMatrixIdEC1Ejj.exit.i.i +	invoke void @_Unwind_Resume(i8* undef) +			to label %.noexc.i.i unwind label %lpad.i.i + +.noexc.i.i:		; preds = %lpad.i.i.i27.i.i +	unreachable + +_ZN10FullMatrixIdEC1Ejj.exit28.i.i:		; preds = %_ZN10FullMatrixIdEC1Ejj.exit.i.i +	br i1 undef, label %bb58.i.i, label %bb.i.i.i304.i.i + +bb.i.i.i304.i.i:		; preds = %_ZN10FullMatrixIdEC1Ejj.exit28.i.i +	unreachable + +bb58.i.i:		; preds = %_ZN10FullMatrixIdEC1Ejj.exit28.i.i +	br i1 false, label %bb.i191.i, label %bb.i.i.i297.i.i + +bb.i.i.i297.i.i:		; preds = %bb58.i.i +	unreachable + +lpad.i.i:		; preds = %lpad.i.i.i27.i.i +	unreachable + +bb.i191.i:		; preds = %.noexc232.i, %bb58.i.i +	invoke fastcc void @_ZN9TableBaseILi2EdE6reinitERK12TableIndicesILi2EE(%"struct.TableBase<2,double>"* undef, i32 undef, i32 undef) +			to label %.noexc232.i unwind label %lpad196.i + +.noexc232.i:		; preds = %bb.i191.i +	br i1 undef, label %bb29.loopexit.i.i, label %bb.i191.i + +bb7.i215.i:		; preds = %bb9.i216.i +	br i1 undef, label %bb16.preheader.i.i, label %bb8.i.i + +bb8.i.i:		; preds = %bb7.i215.i +	%tmp60.i.i = add i32 %0, 1		; <i32> [#uses=1] +	br label %bb9.i216.i + +bb9.i216.i:		; preds = %bb29.loopexit.i.i, %bb8.i.i +	%0 = phi i32 [ 0, %bb29.loopexit.i.i ], [ %tmp60.i.i, %bb8.i.i ]		; <i32> [#uses=2] +	br i1 undef, label %bb7.i215.i, label %bb16.preheader.i.i + +bb15.i.i:		; preds = %bb16.preheader.i.i, %bb15.i.i +	%j1.0212.i.i = phi i32 [ %1, %bb15.i.i ], [ 0, %bb16.preheader.i.i ]		; <i32> [#uses=2] +	%tmp6.i.i195.i.i = load i32* undef, align 4		; <i32> [#uses=1] +	%tmp231.i.i = mul i32 %0, %tmp6.i.i195.i.i		; <i32> [#uses=1] +	%tmp13.i197.i.i = add i32 %j1.0212.i.i, %tmp231.i.i		; <i32> [#uses=0] +	%1 = add i32 %j1.0212.i.i, 1		; <i32> [#uses=1] +	br i1 undef, label %bb15.i.i, label %bb17.i.i + +bb17.i.i:		; preds = %bb16.preheader.i.i, %bb15.i.i +	br label %bb16.preheader.i.i + +bb16.preheader.i.i:		; preds = %bb17.i.i, %bb9.i216.i, %bb7.i215.i +	br i1 undef, label %bb17.i.i, label %bb15.i.i + +bb29.loopexit.i.i:		; preds = %.noexc232.i +	br label %bb9.i216.i + +lpad.i:		; preds = %entry +	unreachable + +lpad120.i:		; preds = %invcont.i +	unreachable + +lpad124.i:		; preds = %invcont1.i +	unreachable + +lpad128.i:		; preds = %invcont3.i +	unreachable + +lpad132.i:		; preds = %invcont4.i +	unreachable + +lpad136.i:		; preds = %invcont6.i +	unreachable + +lpad140.i:		; preds = %bb21.i, %invcont7.i +	unreachable + +lpad144.i:		; preds = %bb10.i168.i, %invcont9.i +	unreachable + +lpad148.i:		; preds = %invcont10.i +	unreachable + +lpad188.i:		; preds = %bb50.i.i.i +	unreachable + +lpad196.i:		; preds = %bb.i191.i +	unreachable + +lpad200.i:		; preds = %bb50.i.i +	unreachable + +lpad204.i:		; preds = %invcont86.i +	unreachable +} + +declare fastcc void @_ZN11Polynomials19LagrangeEquidistant23generate_complete_basisEj(%"struct.std::vector<Polynomials::Polynomial<double>,std::allocator<Polynomials::Polynomial<double> > >"* noalias nocapture sret, i32) + +declare i32 @pthread_once(i32*, void ()*) + +declare i8* @pthread_getspecific(i32) + +declare i32 @pthread_setspecific(i32, i8*) + +declare i32 @pthread_create(i64*, %struct.pthread_attr_t*, i8* (i8*)*, i8*) + +declare i32 @pthread_cancel(i64) + +declare i32 @pthread_mutex_lock(%struct.pthread_mutex_t*) + +declare i32 @pthread_mutex_trylock(%struct.pthread_mutex_t*) + +declare i32 @pthread_mutex_unlock(%struct.pthread_mutex_t*) + +declare i32 @pthread_mutex_init(%struct.pthread_mutex_t*, %"struct.DataOutBase::GmvFlags"*) + +declare i32 @pthread_key_create(i32*, void (i8*)*) + +declare i32 @pthread_key_delete(i32) + +declare i32 @pthread_mutexattr_init(%"struct.DataOutBase::GmvFlags"*) + +declare i32 @pthread_mutexattr_settype(%"struct.DataOutBase::GmvFlags"*, i32) + +declare i32 @pthread_mutexattr_destroy(%"struct.DataOutBase::GmvFlags"*) diff --git a/test/CodeGen/X86/tls3.ll b/test/CodeGen/X86/tls3.ll index e8d1a340baa65..061849901fcf5 100644 --- a/test/CodeGen/X86/tls3.ll +++ b/test/CodeGen/X86/tls3.ll @@ -7,7 +7,7 @@  @i = external thread_local global i32		; <i32*> [#uses=2] -define i32 @f() { +define i32 @f() nounwind {  entry:  	%tmp1 = load i32* @i		; <i32> [#uses=1]  	ret i32 %tmp1 diff --git a/test/CodeGen/X86/x86-64-pic-6.ll b/test/CodeGen/X86/x86-64-pic-6.ll index b8a91f10ea140..965a550108b26 100644 --- a/test/CodeGen/X86/x86-64-pic-6.ll +++ b/test/CodeGen/X86/x86-64-pic-6.ll @@ -5,7 +5,7 @@  @a = internal global i32 0 -define i32 @get_a() { +define i32 @get_a() nounwind {  entry:  	%tmp1 = load i32* @a, align 4  	ret i32 %tmp1 diff --git a/test/CodeGen/X86/x86-64-pic-7.ll b/test/CodeGen/X86/x86-64-pic-7.ll index 63397907716d0..95b7197ff174f 100644 --- a/test/CodeGen/X86/x86-64-pic-7.ll +++ b/test/CodeGen/X86/x86-64-pic-7.ll @@ -2,7 +2,7 @@  ; RUN:   llc -mtriple=x86_64-pc-linux -relocation-model=pic -o %t1 -f  ; RUN: grep {movq	f@GOTPCREL(%rip),} %t1 -define void ()* @g() { +define void ()* @g() nounwind {  entry:  	ret void ()* @f  } diff --git a/test/CodeGen/X86/x86-64-pic-9.ll b/test/CodeGen/X86/x86-64-pic-9.ll index eacfcc11d0ae9..175ec4e5ef95e 100644 --- a/test/CodeGen/X86/x86-64-pic-9.ll +++ b/test/CodeGen/X86/x86-64-pic-9.ll @@ -3,12 +3,12 @@  ; RUN: grep {leaq	f(%rip),} %t1  ; RUN: not grep GOTPCREL %t1 -define void ()* @g() { +define void ()* @g() nounwind {  entry:  	ret void ()* @f  } -define internal void @f() { +define internal void @f() nounwind {  entry:  	ret void  } diff --git a/test/DebugInfo/printdbginfo.ll b/test/DebugInfo/printdbginfo.ll index bd667a7319a83..b3a871d4b212a 100644 --- a/test/DebugInfo/printdbginfo.ll +++ b/test/DebugInfo/printdbginfo.ll @@ -11,58 +11,58 @@  	%llvm.dbg.variable.type = type { i32, { }*, i8*, { }*, i32, { }* }  	%struct.Bar = type { %struct.Foo, i32 }  	%struct.Foo = type { i32 } -@llvm.dbg.subprogram = internal constant %llvm.dbg.subprogram.type { i32 393262, { }* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to { }*), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* getelementptr ([4 x i8]* @.str3, i32 0, i32 0), i8* getelementptr ([9 x i8]* @.str4, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str5, i32 0, i32 0), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 12, { }* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to { }*), i1 false, i1 true }, section "llvm.metadata"		; <%llvm.dbg.subprogram.type*> [#uses=1] -@llvm.dbg.subprograms = linkonce constant %llvm.dbg.anchor.type { i32 393216, i32 46 }, section "llvm.metadata"		; <%llvm.dbg.anchor.type*> [#uses=1] -@llvm.dbg.compile_unit = internal constant %llvm.dbg.compile_unit.type { i32 393233, { }* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to { }*), i32 4, i8* getelementptr ([8 x i8]* @.str, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0) }, section "llvm.metadata"		; <%llvm.dbg.compile_unit.type*> [#uses=1] -@llvm.dbg.compile_units = linkonce constant %llvm.dbg.anchor.type { i32 393216, i32 17 }, section "llvm.metadata"		; <%llvm.dbg.anchor.type*> [#uses=1] +@llvm.dbg.subprogram = internal constant %llvm.dbg.subprogram.type { i32 458798, { }* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to { }*), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* getelementptr ([4 x i8]* @.str3, i32 0, i32 0), i8* getelementptr ([9 x i8]* @.str4, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str5, i32 0, i32 0), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 12, { }* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to { }*), i1 false, i1 true }, section "llvm.metadata"		; <%llvm.dbg.subprogram.type*> [#uses=1] +@llvm.dbg.subprograms = linkonce constant %llvm.dbg.anchor.type { i32 45872, i32 46 }, section "llvm.metadata"		; <%llvm.dbg.anchor.type*> [#uses=1] +@llvm.dbg.compile_unit = internal constant %llvm.dbg.compile_unit.type { i32 458769, { }* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to { }*), i32 4, i8* getelementptr ([8 x i8]* @.str, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0) }, section "llvm.metadata"		; <%llvm.dbg.compile_unit.type*> [#uses=1] +@llvm.dbg.compile_units = linkonce constant %llvm.dbg.anchor.type { i32 45872, i32 17 }, section "llvm.metadata"		; <%llvm.dbg.anchor.type*> [#uses=1]  @.str = internal constant [8 x i8] c"tst.cpp\00", section "llvm.metadata"		; <[8 x i8]*> [#uses=1]  @.str1 = internal constant [13 x i8] c"/home/edwin/\00", section "llvm.metadata"		; <[13 x i8]*> [#uses=1]  @.str2 = internal constant [52 x i8] c"4.2.1 (Based on Apple Inc. build 5623) (LLVM build)\00", section "llvm.metadata"		; <[52 x i8]*> [#uses=1]  @.str3 = internal constant [4 x i8] c"bar\00", section "llvm.metadata"		; <[4 x i8]*> [#uses=1]  @.str4 = internal constant [9 x i8] c"Bar::bar\00", section "llvm.metadata"		; <[9 x i8]*> [#uses=1]  @.str5 = internal constant [14 x i8] c"_ZN3Bar3barEv\00", section "llvm.metadata"		; <[14 x i8]*> [#uses=1] -@llvm.dbg.basictype = internal constant %llvm.dbg.basictype.type { i32 393252, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* getelementptr ([4 x i8]* @.str6, i32 0, i32 0), { }* null, i32 0, i64 32, i64 32, i64 0, i32 0, i32 5 }, section "llvm.metadata"		; <%llvm.dbg.basictype.type*> [#uses=1] +@llvm.dbg.basictype = internal constant %llvm.dbg.basictype.type { i32 458788, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* getelementptr ([4 x i8]* @.str6, i32 0, i32 0), { }* null, i32 0, i64 32, i64 32, i64 0, i32 0, i32 5 }, section "llvm.metadata"		; <%llvm.dbg.basictype.type*> [#uses=1]  @.str6 = internal constant [4 x i8] c"int\00", section "llvm.metadata"		; <[4 x i8]*> [#uses=1] -@llvm.dbg.variable = internal constant %llvm.dbg.variable.type { i32 393473, { }* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram to { }*), i8* getelementptr ([5 x i8]* @.str7, i32 0, i32 0), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 12, { }* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype to { }*) }, section "llvm.metadata"		; <%llvm.dbg.variable.type*> [#uses=0] +@llvm.dbg.variable = internal constant %llvm.dbg.variable.type { i32 459009, { }* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram to { }*), i8* getelementptr ([5 x i8]* @.str7, i32 0, i32 0), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 12, { }* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype to { }*) }, section "llvm.metadata"		; <%llvm.dbg.variable.type*> [#uses=0]  @.str7 = internal constant [5 x i8] c"this\00", section "llvm.metadata"		; <[5 x i8]*> [#uses=1] -@llvm.dbg.derivedtype = internal constant %llvm.dbg.derivedtype.type { i32 393231, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* null, { }* null, i32 0, i64 64, i64 64, i64 0, i32 0, { }* bitcast (%llvm.dbg.compositetype.type* @llvm.dbg.compositetype to { }*) }, section "llvm.metadata"		; <%llvm.dbg.derivedtype.type*> [#uses=1] -@llvm.dbg.compositetype = internal constant %llvm.dbg.compositetype.type { i32 393235, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* getelementptr ([4 x i8]* @.str8, i32 0, i32 0), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 5, i64 64, i64 32, i64 0, i32 0, { }* null, { }* bitcast ([5 x { }*]* @llvm.dbg.array36 to { }*) }, section "llvm.metadata"		; <%llvm.dbg.compositetype.type*> [#uses=1] +@llvm.dbg.derivedtype = internal constant %llvm.dbg.derivedtype.type { i32 458767, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* null, { }* null, i32 0, i64 64, i64 64, i64 0, i32 0, { }* bitcast (%llvm.dbg.compositetype.type* @llvm.dbg.compositetype to { }*) }, section "llvm.metadata"		; <%llvm.dbg.derivedtype.type*> [#uses=1] +@llvm.dbg.compositetype = internal constant %llvm.dbg.compositetype.type { i32 458771, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* getelementptr ([4 x i8]* @.str8, i32 0, i32 0), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 5, i64 64, i64 32, i64 0, i32 0, { }* null, { }* bitcast ([5 x { }*]* @llvm.dbg.array36 to { }*) }, section "llvm.metadata"		; <%llvm.dbg.compositetype.type*> [#uses=1]  @.str8 = internal constant [4 x i8] c"Bar\00", section "llvm.metadata"		; <[4 x i8]*> [#uses=1] -@llvm.dbg.derivedtype9 = internal constant %llvm.dbg.derivedtype.type { i32 393244, { }* null, i8* null, { }* null, i32 0, i64 0, i64 0, i64 0, i32 0, { }* bitcast (%llvm.dbg.compositetype.type* @llvm.dbg.compositetype10 to { }*) }, section "llvm.metadata"		; <%llvm.dbg.derivedtype.type*> [#uses=1] -@llvm.dbg.compositetype10 = internal constant %llvm.dbg.compositetype.type { i32 393235, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* getelementptr ([4 x i8]* @.str11, i32 0, i32 0), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 1, i64 32, i64 32, i64 0, i32 0, { }* null, { }* bitcast ([3 x { }*]* @llvm.dbg.array22 to { }*) }, section "llvm.metadata"		; <%llvm.dbg.compositetype.type*> [#uses=1] +@llvm.dbg.derivedtype9 = internal constant %llvm.dbg.derivedtype.type { i32 458780, { }* null, i8* null, { }* null, i32 0, i64 0, i64 0, i64 0, i32 0, { }* bitcast (%llvm.dbg.compositetype.type* @llvm.dbg.compositetype10 to { }*) }, section "llvm.metadata"		; <%llvm.dbg.derivedtype.type*> [#uses=1] +@llvm.dbg.compositetype10 = internal constant %llvm.dbg.compositetype.type { i32 458771, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* getelementptr ([4 x i8]* @.str11, i32 0, i32 0), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 1, i64 32, i64 32, i64 0, i32 0, { }* null, { }* bitcast ([3 x { }*]* @llvm.dbg.array22 to { }*) }, section "llvm.metadata"		; <%llvm.dbg.compositetype.type*> [#uses=1]  @.str11 = internal constant [4 x i8] c"Foo\00", section "llvm.metadata"		; <[4 x i8]*> [#uses=1] -@llvm.dbg.derivedtype12 = internal constant %llvm.dbg.derivedtype.type { i32 393229, { }* null, i8* getelementptr ([7 x i8]* @.str13, i32 0, i32 0), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 2, i64 32, i64 32, i64 0, i32 0, { }* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to { }*) }, section "llvm.metadata"		; <%llvm.dbg.derivedtype.type*> [#uses=1] +@llvm.dbg.derivedtype12 = internal constant %llvm.dbg.derivedtype.type { i32 458765, { }* null, i8* getelementptr ([7 x i8]* @.str13, i32 0, i32 0), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 2, i64 32, i64 32, i64 0, i32 0, { }* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to { }*) }, section "llvm.metadata"		; <%llvm.dbg.derivedtype.type*> [#uses=1]  @.str13 = internal constant [7 x i8] c"FooVar\00", section "llvm.metadata"		; <[7 x i8]*> [#uses=1] -@llvm.dbg.subprogram14 = internal constant %llvm.dbg.subprogram.type { i32 393262, { }* null, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* getelementptr ([4 x i8]* @.str11, i32 0, i32 0), i8* getelementptr ([9 x i8]* @.str15, i32 0, i32 0), i8* null, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 12, { }* bitcast (%llvm.dbg.compositetype.type* @llvm.dbg.compositetype16 to { }*), i1 false, i1 false }, section "llvm.metadata"		; <%llvm.dbg.subprogram.type*> [#uses=1] +@llvm.dbg.subprogram14 = internal constant %llvm.dbg.subprogram.type { i32 458798, { }* null, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* getelementptr ([4 x i8]* @.str11, i32 0, i32 0), i8* getelementptr ([9 x i8]* @.str15, i32 0, i32 0), i8* null, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 12, { }* bitcast (%llvm.dbg.compositetype.type* @llvm.dbg.compositetype16 to { }*), i1 false, i1 false }, section "llvm.metadata"		; <%llvm.dbg.subprogram.type*> [#uses=1]  @.str15 = internal constant [9 x i8] c"Foo::Foo\00", section "llvm.metadata"		; <[9 x i8]*> [#uses=1] -@llvm.dbg.compositetype16 = internal constant %llvm.dbg.compositetype.type { i32 393237, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* null, { }* null, i32 0, i64 8, i64 8, i64 0, i32 0, { }* null, { }* bitcast ([3 x { }*]* @llvm.dbg.array to { }*) }, section "llvm.metadata"		; <%llvm.dbg.compositetype.type*> [#uses=1] -@llvm.dbg.derivedtype17 = internal constant %llvm.dbg.derivedtype.type { i32 393231, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* null, { }* null, i32 0, i64 64, i64 64, i64 0, i32 0, { }* bitcast (%llvm.dbg.compositetype.type* @llvm.dbg.compositetype10 to { }*) }, section "llvm.metadata"		; <%llvm.dbg.derivedtype.type*> [#uses=1] -@llvm.dbg.derivedtype18 = internal constant %llvm.dbg.derivedtype.type { i32 393232, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* null, { }* null, i32 0, i64 64, i64 64, i64 0, i32 0, { }* bitcast (%llvm.dbg.compositetype.type* @llvm.dbg.compositetype10 to { }*) }, section "llvm.metadata"		; <%llvm.dbg.derivedtype.type*> [#uses=1] +@llvm.dbg.compositetype16 = internal constant %llvm.dbg.compositetype.type { i32 458773, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* null, { }* null, i32 0, i64 8, i64 8, i64 0, i32 0, { }* null, { }* bitcast ([3 x { }*]* @llvm.dbg.array to { }*) }, section "llvm.metadata"		; <%llvm.dbg.compositetype.type*> [#uses=1] +@llvm.dbg.derivedtype17 = internal constant %llvm.dbg.derivedtype.type { i32 458767, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* null, { }* null, i32 0, i64 64, i64 64, i64 0, i32 0, { }* bitcast (%llvm.dbg.compositetype.type* @llvm.dbg.compositetype10 to { }*) }, section "llvm.metadata"		; <%llvm.dbg.derivedtype.type*> [#uses=1] +@llvm.dbg.derivedtype18 = internal constant %llvm.dbg.derivedtype.type { i32 458768, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* null, { }* null, i32 0, i64 64, i64 64, i64 0, i32 0, { }* bitcast (%llvm.dbg.compositetype.type* @llvm.dbg.compositetype10 to { }*) }, section "llvm.metadata"		; <%llvm.dbg.derivedtype.type*> [#uses=1]  @llvm.dbg.array = internal constant [3 x { }*] [ { }* null, { }* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype17 to { }*), { }* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype18 to { }*) ], section "llvm.metadata"		; <[3 x { }*]*> [#uses=1] -@llvm.dbg.subprogram19 = internal constant %llvm.dbg.subprogram.type { i32 393262, { }* null, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* getelementptr ([4 x i8]* @.str11, i32 0, i32 0), i8* getelementptr ([9 x i8]* @.str15, i32 0, i32 0), i8* null, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 12, { }* bitcast (%llvm.dbg.compositetype.type* @llvm.dbg.compositetype20 to { }*), i1 false, i1 false }, section "llvm.metadata"		; <%llvm.dbg.subprogram.type*> [#uses=1] -@llvm.dbg.compositetype20 = internal constant %llvm.dbg.compositetype.type { i32 393237, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* null, { }* null, i32 0, i64 8, i64 8, i64 0, i32 0, { }* null, { }* bitcast ([2 x { }*]* @llvm.dbg.array21 to { }*) }, section "llvm.metadata"		; <%llvm.dbg.compositetype.type*> [#uses=1] +@llvm.dbg.subprogram19 = internal constant %llvm.dbg.subprogram.type { i32 458798, { }* null, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* getelementptr ([4 x i8]* @.str11, i32 0, i32 0), i8* getelementptr ([9 x i8]* @.str15, i32 0, i32 0), i8* null, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 12, { }* bitcast (%llvm.dbg.compositetype.type* @llvm.dbg.compositetype20 to { }*), i1 false, i1 false }, section "llvm.metadata"		; <%llvm.dbg.subprogram.type*> [#uses=1] +@llvm.dbg.compositetype20 = internal constant %llvm.dbg.compositetype.type { i32 458773, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* null, { }* null, i32 0, i64 8, i64 8, i64 0, i32 0, { }* null, { }* bitcast ([2 x { }*]* @llvm.dbg.array21 to { }*) }, section "llvm.metadata"		; <%llvm.dbg.compositetype.type*> [#uses=1]  @llvm.dbg.array21 = internal constant [2 x { }*] [ { }* null, { }* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype17 to { }*) ], section "llvm.metadata"		; <[2 x { }*]*> [#uses=1]  @llvm.dbg.array22 = internal constant [3 x { }*] [ { }* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype12 to { }*), { }* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram14 to { }*), { }* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram19 to { }*) ], section "llvm.metadata"		; <[3 x { }*]*> [#uses=1] -@llvm.dbg.derivedtype23 = internal constant %llvm.dbg.derivedtype.type { i32 393229, { }* null, i8* getelementptr ([7 x i8]* @.str24, i32 0, i32 0), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 6, i64 32, i64 32, i64 32, i32 1, { }* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to { }*) }, section "llvm.metadata"		; <%llvm.dbg.derivedtype.type*> [#uses=1] +@llvm.dbg.derivedtype23 = internal constant %llvm.dbg.derivedtype.type { i32 458765, { }* null, i8* getelementptr ([7 x i8]* @.str24, i32 0, i32 0), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 6, i64 32, i64 32, i64 32, i32 1, { }* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to { }*) }, section "llvm.metadata"		; <%llvm.dbg.derivedtype.type*> [#uses=1]  @.str24 = internal constant [7 x i8] c"BarVar\00", section "llvm.metadata"		; <[7 x i8]*> [#uses=1] -@llvm.dbg.subprogram25 = internal constant %llvm.dbg.subprogram.type { i32 393262, { }* null, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* getelementptr ([4 x i8]* @.str8, i32 0, i32 0), i8* getelementptr ([9 x i8]* @.str26, i32 0, i32 0), i8* null, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 12, { }* bitcast (%llvm.dbg.compositetype.type* @llvm.dbg.compositetype27 to { }*), i1 false, i1 false }, section "llvm.metadata"		; <%llvm.dbg.subprogram.type*> [#uses=1] +@llvm.dbg.subprogram25 = internal constant %llvm.dbg.subprogram.type { i32 458798, { }* null, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* getelementptr ([4 x i8]* @.str8, i32 0, i32 0), i8* getelementptr ([9 x i8]* @.str26, i32 0, i32 0), i8* null, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 12, { }* bitcast (%llvm.dbg.compositetype.type* @llvm.dbg.compositetype27 to { }*), i1 false, i1 false }, section "llvm.metadata"		; <%llvm.dbg.subprogram.type*> [#uses=1]  @.str26 = internal constant [9 x i8] c"Bar::Bar\00", section "llvm.metadata"		; <[9 x i8]*> [#uses=1] -@llvm.dbg.compositetype27 = internal constant %llvm.dbg.compositetype.type { i32 393237, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* null, { }* null, i32 0, i64 8, i64 8, i64 0, i32 0, { }* null, { }* bitcast ([3 x { }*]* @llvm.dbg.array29 to { }*) }, section "llvm.metadata"		; <%llvm.dbg.compositetype.type*> [#uses=1] -@llvm.dbg.derivedtype28 = internal constant %llvm.dbg.derivedtype.type { i32 393232, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* null, { }* null, i32 0, i64 64, i64 64, i64 0, i32 0, { }* bitcast (%llvm.dbg.compositetype.type* @llvm.dbg.compositetype to { }*) }, section "llvm.metadata"		; <%llvm.dbg.derivedtype.type*> [#uses=1] +@llvm.dbg.compositetype27 = internal constant %llvm.dbg.compositetype.type { i32 458773, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* null, { }* null, i32 0, i64 8, i64 8, i64 0, i32 0, { }* null, { }* bitcast ([3 x { }*]* @llvm.dbg.array29 to { }*) }, section "llvm.metadata"		; <%llvm.dbg.compositetype.type*> [#uses=1] +@llvm.dbg.derivedtype28 = internal constant %llvm.dbg.derivedtype.type { i32 458768, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* null, { }* null, i32 0, i64 64, i64 64, i64 0, i32 0, { }* bitcast (%llvm.dbg.compositetype.type* @llvm.dbg.compositetype to { }*) }, section "llvm.metadata"		; <%llvm.dbg.derivedtype.type*> [#uses=1]  @llvm.dbg.array29 = internal constant [3 x { }*] [ { }* null, { }* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype to { }*), { }* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype28 to { }*) ], section "llvm.metadata"		; <[3 x { }*]*> [#uses=1] -@llvm.dbg.subprogram30 = internal constant %llvm.dbg.subprogram.type { i32 393262, { }* null, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* getelementptr ([4 x i8]* @.str8, i32 0, i32 0), i8* getelementptr ([9 x i8]* @.str26, i32 0, i32 0), i8* null, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 12, { }* bitcast (%llvm.dbg.compositetype.type* @llvm.dbg.compositetype31 to { }*), i1 false, i1 false }, section "llvm.metadata"		; <%llvm.dbg.subprogram.type*> [#uses=1] -@llvm.dbg.compositetype31 = internal constant %llvm.dbg.compositetype.type { i32 393237, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* null, { }* null, i32 0, i64 8, i64 8, i64 0, i32 0, { }* null, { }* bitcast ([2 x { }*]* @llvm.dbg.array32 to { }*) }, section "llvm.metadata"		; <%llvm.dbg.compositetype.type*> [#uses=1] +@llvm.dbg.subprogram30 = internal constant %llvm.dbg.subprogram.type { i32 458798, { }* null, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* getelementptr ([4 x i8]* @.str8, i32 0, i32 0), i8* getelementptr ([9 x i8]* @.str26, i32 0, i32 0), i8* null, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 12, { }* bitcast (%llvm.dbg.compositetype.type* @llvm.dbg.compositetype31 to { }*), i1 false, i1 false }, section "llvm.metadata"		; <%llvm.dbg.subprogram.type*> [#uses=1] +@llvm.dbg.compositetype31 = internal constant %llvm.dbg.compositetype.type { i32 458773, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* null, { }* null, i32 0, i64 8, i64 8, i64 0, i32 0, { }* null, { }* bitcast ([2 x { }*]* @llvm.dbg.array32 to { }*) }, section "llvm.metadata"		; <%llvm.dbg.compositetype.type*> [#uses=1]  @llvm.dbg.array32 = internal constant [2 x { }*] [ { }* null, { }* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype to { }*) ], section "llvm.metadata"		; <[2 x { }*]*> [#uses=1] -@llvm.dbg.subprogram33 = internal constant %llvm.dbg.subprogram.type { i32 393262, { }* null, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* getelementptr ([4 x i8]* @.str3, i32 0, i32 0), i8* getelementptr ([9 x i8]* @.str4, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str5, i32 0, i32 0), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 12, { }* bitcast (%llvm.dbg.compositetype.type* @llvm.dbg.compositetype34 to { }*), i1 false, i1 false }, section "llvm.metadata"		; <%llvm.dbg.subprogram.type*> [#uses=1] -@llvm.dbg.compositetype34 = internal constant %llvm.dbg.compositetype.type { i32 393237, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* null, { }* null, i32 0, i64 8, i64 8, i64 0, i32 0, { }* null, { }* bitcast ([2 x { }*]* @llvm.dbg.array35 to { }*) }, section "llvm.metadata"		; <%llvm.dbg.compositetype.type*> [#uses=1] +@llvm.dbg.subprogram33 = internal constant %llvm.dbg.subprogram.type { i32 458798, { }* null, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* getelementptr ([4 x i8]* @.str3, i32 0, i32 0), i8* getelementptr ([9 x i8]* @.str4, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str5, i32 0, i32 0), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 12, { }* bitcast (%llvm.dbg.compositetype.type* @llvm.dbg.compositetype34 to { }*), i1 false, i1 false }, section "llvm.metadata"		; <%llvm.dbg.subprogram.type*> [#uses=1] +@llvm.dbg.compositetype34 = internal constant %llvm.dbg.compositetype.type { i32 458773, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* null, { }* null, i32 0, i64 8, i64 8, i64 0, i32 0, { }* null, { }* bitcast ([2 x { }*]* @llvm.dbg.array35 to { }*) }, section "llvm.metadata"		; <%llvm.dbg.compositetype.type*> [#uses=1]  @llvm.dbg.array35 = internal constant [2 x { }*] [ { }* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to { }*), { }* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype to { }*) ], section "llvm.metadata"		; <[2 x { }*]*> [#uses=1]  @llvm.dbg.array36 = internal constant [5 x { }*] [ { }* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype9 to { }*), { }* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype23 to { }*), { }* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram25 to { }*), { }* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram30 to { }*), { }* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram33 to { }*) ], section "llvm.metadata"		; <[5 x { }*]*> [#uses=1] -@llvm.dbg.variable37 = internal constant %llvm.dbg.variable.type { i32 393472, { }* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram to { }*), i8* getelementptr ([4 x i8]* @.str38, i32 0, i32 0), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 15, { }* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to { }*) }, section "llvm.metadata"		; <%llvm.dbg.variable.type*> [#uses=0] +@llvm.dbg.variable37 = internal constant %llvm.dbg.variable.type { i32 459008, { }* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram to { }*), i8* getelementptr ([4 x i8]* @.str38, i32 0, i32 0), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 15, { }* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to { }*) }, section "llvm.metadata"		; <%llvm.dbg.variable.type*> [#uses=0]  @.str38 = internal constant [4 x i8] c"tmp\00", section "llvm.metadata"		; <[4 x i8]*> [#uses=1] -@llvm.dbg.subprogram39 = internal constant %llvm.dbg.subprogram.type { i32 393262, { }* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to { }*), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* getelementptr ([7 x i8]* @.str40, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str40, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str41, i32 0, i32 0), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 21, { }* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype to { }*), i1 false, i1 true }, section "llvm.metadata"		; <%llvm.dbg.subprogram.type*> [#uses=1] +@llvm.dbg.subprogram39 = internal constant %llvm.dbg.subprogram.type { i32 458798, { }* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to { }*), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i8* getelementptr ([7 x i8]* @.str40, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str40, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str41, i32 0, i32 0), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 21, { }* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype to { }*), i1 false, i1 true }, section "llvm.metadata"		; <%llvm.dbg.subprogram.type*> [#uses=1]  @.str40 = internal constant [7 x i8] c"foobar\00", section "llvm.metadata"		; <[7 x i8]*> [#uses=1]  @.str41 = internal constant [11 x i8] c"_Z6foobarv\00", section "llvm.metadata"		; <[11 x i8]*> [#uses=1] -@llvm.dbg.variable42 = internal constant %llvm.dbg.variable.type { i32 393472, { }* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram39 to { }*), i8* getelementptr ([4 x i8]* @.str38, i32 0, i32 0), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 23, { }* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype to { }*) }, section "llvm.metadata"		; <%llvm.dbg.variable.type*> [#uses=0] +@llvm.dbg.variable42 = internal constant %llvm.dbg.variable.type { i32 459008, { }* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram39 to { }*), i8* getelementptr ([4 x i8]* @.str38, i32 0, i32 0), { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*), i32 23, { }* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype to { }*) }, section "llvm.metadata"		; <%llvm.dbg.variable.type*> [#uses=0]  define i32 @_ZN3Bar3barEv(%struct.Bar* %this1) nounwind {  entry: diff --git a/test/Feature/mdnode.ll b/test/Feature/mdnode.ll new file mode 100644 index 0000000000000..d63b46e9b4383 --- /dev/null +++ b/test/Feature/mdnode.ll @@ -0,0 +1,4 @@ +; RUN: llvm-as < %s | llc -f -o /dev/null +@llvm.foo =  constant metadata !{i17 123, null, metadata !"foobar"} +@llvm.bar =  constant metadata !"barbar" + diff --git a/test/MC/AsmParser/assignment.s b/test/MC/AsmParser/assignment.s new file mode 100644 index 0000000000000..8e6ff34fe4b4c --- /dev/null +++ b/test/MC/AsmParser/assignment.s @@ -0,0 +1,7 @@ +# RUN: llvm-mc %s > %t + +# RUN: grep -A 2 TEST0 %t > %t2 +# RUN: grep "a = 0" %t2 +TEST0:   +        a = 0 +        
\ No newline at end of file diff --git a/test/MC/AsmParser/dg.exp b/test/MC/AsmParser/dg.exp new file mode 100644 index 0000000000000..ebd84187f520f --- /dev/null +++ b/test/MC/AsmParser/dg.exp @@ -0,0 +1,3 @@ +load_lib llvm.exp + +RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{s}]] diff --git a/test/MC/AsmParser/directive_ascii.s b/test/MC/AsmParser/directive_ascii.s new file mode 100644 index 0000000000000..95e194a376877 --- /dev/null +++ b/test/MC/AsmParser/directive_ascii.s @@ -0,0 +1,25 @@ +# RUN: llvm-mc %s > %t + +# RUN: grep -A 1 TEST0 %t > %t2 +# RUN: not grep ".byte" %t2 +TEST0:   +        .ascii + +# RUN: grep -A 1 TEST1 %t > %t2 +# RUN: not grep "byte" %t2 +TEST1:   +        .asciz + +# RUN: grep -A 2 TEST2 %t > %t2 +# RUN: grep ".byte 65" %t2 | count 1 +TEST2:   +        .ascii "A" + +# RUN: grep -A 5 TEST3 %t > %t2 +# RUN: grep ".byte 66" %t2 | count 1 +# RUN: grep ".byte 67" %t2 | count 1 +# RUN: grep ".byte 0" %t2 | count 2 +TEST3:   +        .asciz "B", "C" + +       
\ No newline at end of file diff --git a/test/MC/AsmParser/directive_fill.s b/test/MC/AsmParser/directive_fill.s new file mode 100644 index 0000000000000..ec8bdf27c7123 --- /dev/null +++ b/test/MC/AsmParser/directive_fill.s @@ -0,0 +1,11 @@ +# RUN: llvm-mc %s > %t + +# RUN: grep -A 2 TEST0 %t > %t2 +# RUN: grep ".byte 10" %t2 | count 1 +TEST0:   +        .fill 1, 1, 10 + +# RUN: grep -A 3 TEST1 %t > %t2 +# RUN: grep ".short 3" %t2 | count 2 +TEST1:   +        .fill 2, 2, 3 diff --git a/test/MC/AsmParser/directive_org.s b/test/MC/AsmParser/directive_org.s new file mode 100644 index 0000000000000..ac50f635e6bba --- /dev/null +++ b/test/MC/AsmParser/directive_org.s @@ -0,0 +1,11 @@ +# RUN: llvm-mc %s > %t + +# RUN: grep -A 2 TEST0 %t > %t2 +# RUN: grep ".org 1, 0" %t2 | count 1 +TEST0:   +        .org 1 + +# RUN: grep -A 2 TEST1 %t > %t2 +# RUN: grep ".org 1, 3" %t2 | count 1 +TEST1:   +        .org 1, 3 diff --git a/test/MC/AsmParser/directive_set.s b/test/MC/AsmParser/directive_set.s new file mode 100644 index 0000000000000..51119a661cad2 --- /dev/null +++ b/test/MC/AsmParser/directive_set.s @@ -0,0 +1,7 @@ +# RUN: llvm-mc %s > %t + +# RUN: grep -A 2 TEST0 %t > %t2 +# RUN: grep ".set a, 0" %t2 +TEST0:   +        .set a, 0 +        
\ No newline at end of file diff --git a/test/MC/AsmParser/directive_space.s b/test/MC/AsmParser/directive_space.s new file mode 100644 index 0000000000000..6159775de4bce --- /dev/null +++ b/test/MC/AsmParser/directive_space.s @@ -0,0 +1,11 @@ +# RUN: llvm-mc %s > %t + +# RUN: grep -A 2 TEST0 %t > %t2 +# RUN: grep ".byte 0" %t2 | count 1 +TEST0:   +        .space 1 + +# RUN: grep -A 3 TEST1 %t > %t2 +# RUN: grep ".byte 3" %t2 | count 2 +TEST1:   +        .space 2, 3 diff --git a/test/MC/AsmParser/directive_values.s b/test/MC/AsmParser/directive_values.s new file mode 100644 index 0000000000000..39ba068923486 --- /dev/null +++ b/test/MC/AsmParser/directive_values.s @@ -0,0 +1,21 @@ +# RUN: llvm-mc %s > %t + +# RUN: grep -A 2 TEST0 %t > %t2 +# RUN: grep ".byte 0" %t2 | count 1 +TEST0:   +        .byte 0 + +# RUN: grep -A 2 TEST1 %t > %t2 +# RUN: grep ".short 3" %t2 | count 1 +TEST1:   +        .short 3 + +# RUN: grep -A 2 TEST2 %t > %t2 +# RUN: grep ".long 8" %t2 | count 1 +TEST2:   +        .long 8 + +# RUN: grep -A 2 TEST3 %t > %t2 +# RUN: grep ".quad 9" %t2 | count 1 +TEST3:   +        .quad 9 diff --git a/test/Makefile b/test/Makefile index 82422b551d7c7..e02daa072546a 100644 --- a/test/Makefile +++ b/test/Makefile @@ -22,6 +22,10 @@ include Makefile.tests  # DejaGNU testing support  #===------------------------------------------------------------------------===# +ifneq ($(GREP_OPTIONS),) +$(warning GREP_OPTIONS environment variable may interfere with test results) +endif +  ifdef VERBOSE  RUNTESTFLAGS := $(VERBOSE)  endif diff --git a/test/Transforms/IndVarSimplify/loop-invariant-step.ll b/test/Transforms/IndVarSimplify/loop-invariant-step.ll new file mode 100644 index 0000000000000..40156eaab59ee --- /dev/null +++ b/test/Transforms/IndVarSimplify/loop-invariant-step.ll @@ -0,0 +1,33 @@ +; RUN: llvm-as < %s | opt -loop-index-split -instcombine -indvars -disable-output +; PR4455 + +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128" + +declare i8* @fast_memcpy(i8*, i8*, i64) + +define void @dvdsub_decode() nounwind { +entry:		; preds = %bb1 +	br label %LoopA + +LoopA:		; preds = %LoopA, %entry +	%x1.0.i17 = phi i32 [ %t0, %LoopA ], [ 0, %entry ]		; <i32> [#uses=2] +	%t0 = add i32 %x1.0.i17, 1		; <i32> [#uses=1] +	br i1 undef, label %LoopA, label %middle + +middle:		; preds = %LoopA +	%t1 = sub i32 0, %x1.0.i17		; <i32> [#uses=1] +	%t2 = add i32 %t1, 1		; <i32> [#uses=1] +	br label %LoopB + +LoopB:		; preds = %LoopB, %bb.nph.i27 +	%y.029.i = phi i32 [ 0, %middle ], [ %t7, %LoopB ]		; <i32> [#uses=2] +	%t3 = mul i32 %y.029.i, %t2		; <i32> [#uses=1] +	%t4 = sext i32 %t3 to i64		; <i64> [#uses=1] +	%t5 = getelementptr i8* null, i64 %t4		; <i8*> [#uses=1] +	%t6 = call i8* @fast_memcpy(i8* %t5, i8* undef, i64 undef) nounwind		; <i8*> [#uses=0] +	%t7 = add i32 %y.029.i, 1		; <i32> [#uses=1] +	br i1 undef, label %LoopB, label %exit + +exit: +	ret void +} diff --git a/test/Transforms/IndVarSimplify/loop_evaluate7.ll b/test/Transforms/IndVarSimplify/loop_evaluate7.ll new file mode 100644 index 0000000000000..6e31c55d52659 --- /dev/null +++ b/test/Transforms/IndVarSimplify/loop_evaluate7.ll @@ -0,0 +1,61 @@ +; RUN: llvm-as < %s | opt -indvars +; PR4436 + +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32" +target triple = "i386-pc-linux-gnu" + +define i8* @string_expandtabs(i32 %n, i8* %m) nounwind { +entry: +	br i1 undef, label %bb33, label %bb1 + +bb1:		; preds = %entry +	br i1 undef, label %overflow1, label %bb15 + +bb15:		; preds = %bb1 +	br i1 undef, label %bb33, label %bb17 + +bb17:		; preds = %bb15 +	br label %bb30 + +bb19:		; preds = %bb30 +	br i1 undef, label %bb20, label %bb29 + +bb20:		; preds = %bb19 +	%0 = load i32* undef, align 4		; <i32> [#uses=1] +	%1 = sub i32 %0, %n		; <i32> [#uses=1] +	br label %bb23 + +bb21:		; preds = %bb23 +	%2 = icmp ult i8* %q.0, %m		; <i1> [#uses=1] +	br i1 %2, label %bb22, label %overflow2 + +bb22:		; preds = %bb21 +	%3 = getelementptr i8* %q.0, i32 1		; <i8*> [#uses=1] +	br label %bb23 + +bb23:		; preds = %bb22, %bb20 +	%i.2 = phi i32 [ %1, %bb20 ], [ %4, %bb22 ]		; <i32> [#uses=1] +	%q.0 = phi i8* [ undef, %bb20 ], [ %3, %bb22 ]		; <i8*> [#uses=3] +	%4 = add i32 %i.2, -1		; <i32> [#uses=2] +	%5 = icmp eq i32 %4, -1		; <i1> [#uses=1] +	br i1 %5, label %bb29, label %bb21 + +bb29:		; preds = %bb23, %bb19 +	%q.1 = phi i8* [ undef, %bb19 ], [ %q.0, %bb23 ]		; <i8*> [#uses=0] +	br label %bb30 + +bb30:		; preds = %bb29, %bb17 +	br i1 undef, label %bb19, label %bb33 + +overflow2:		; preds = %bb21 +	br i1 undef, label %bb32, label %overflow1 + +bb32:		; preds = %overflow2 +	br label %overflow1 + +overflow1:		; preds = %bb32, %overflow2, %bb1 +	ret i8* null + +bb33:		; preds = %bb30, %bb15, %entry +	ret i8* undef +} diff --git a/test/Transforms/IndVarSimplify/loop_evaluate8.ll b/test/Transforms/IndVarSimplify/loop_evaluate8.ll new file mode 100644 index 0000000000000..fa2f9e57f07cf --- /dev/null +++ b/test/Transforms/IndVarSimplify/loop_evaluate8.ll @@ -0,0 +1,63 @@ +; RUN: llvm-as < %s | opt -indvars | llvm-dis | not grep select + +; This loop has backedge-taken-count zero. Indvars shouldn't expand any +; instructions to compute a trip count. + +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32" +target triple = "i386-pc-linux-gnu" + +define i8* @string_expandtabs() nounwind { +entry: +	br i1 undef, label %bb33, label %bb1 + +bb1:		; preds = %entry +	br i1 undef, label %overflow1, label %bb15 + +bb15:		; preds = %bb1 +	br i1 undef, label %bb33, label %bb17 + +bb17:		; preds = %bb15 +	br label %bb30 + +bb19:		; preds = %bb30 +	br i1 undef, label %bb20, label %bb29 + +bb20:		; preds = %bb19 +	%0 = load i32* undef, align 4		; <i32> [#uses=1] +	%1 = sub i32 %0, undef		; <i32> [#uses=1] +	br label %bb23 + +bb21:		; preds = %bb23 +	%2 = icmp ult i8* %q.0, undef		; <i1> [#uses=1] +	br i1 %2, label %bb22, label %overflow2 + +bb22:		; preds = %bb21 +	%3 = getelementptr i8* %q.0, i32 1		; <i8*> [#uses=1] +	br label %bb23 + +bb23:		; preds = %bb22, %bb20 +	%i.2 = phi i32 [ %1, %bb20 ], [ %4, %bb22 ]		; <i32> [#uses=1] +	%q.0 = phi i8* [ undef, %bb20 ], [ %3, %bb22 ]		; <i8*> [#uses=3] +	%4 = add i32 %i.2, -1		; <i32> [#uses=2] +	%5 = icmp eq i32 %4, -1		; <i1> [#uses=1] +	br i1 %5, label %bb29, label %bb21 + +bb29:		; preds = %bb23, %bb19 +	%q.1 = phi i8* [ undef, %bb19 ], [ %q.0, %bb23 ]		; <i8*> [#uses=0] +	br label %bb30 + +bb30:		; preds = %bb29, %bb17 +	br i1 undef, label %bb19, label %bb33 + +overflow2:		; preds = %bb21 +	br i1 undef, label %bb32, label %overflow1 + +bb32:		; preds = %overflow2 +	br label %overflow1 + +overflow1:		; preds = %bb32, %overflow2, %bb1 +	ret i8* null + +bb33:		; preds = %bb30, %bb15, %entry +	ret i8* undef +} diff --git a/test/Transforms/IndVarSimplify/phi-uses-value-multiple-times.ll b/test/Transforms/IndVarSimplify/phi-uses-value-multiple-times.ll new file mode 100644 index 0000000000000..7119cbbc05c6e --- /dev/null +++ b/test/Transforms/IndVarSimplify/phi-uses-value-multiple-times.ll @@ -0,0 +1,33 @@ +; RUN: llvm-as < %s | opt -indvars +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128" + +@ue = external global i64 + +define i32 @foo() nounwind { +entry: +	br label %bb38.i + +bb14.i27: +	%t0 = load i64* @ue, align 8 +	%t1 = sub i64 %t0, %i.0.i35 +	%t2 = add i64 %t1, 1 +	br i1 undef, label %bb15.i28, label %bb19.i31 + +bb15.i28: +	br label %bb19.i31 + +bb19.i31: +	%y.0.i = phi i64 [ %t2, %bb15.i28 ], [ %t2, %bb14.i27 ] +	br label %bb35.i + +bb35.i: +	br i1 undef, label %bb37.i, label %bb14.i27 + +bb37.i: +	%t3 = add i64 %i.0.i35, 1 +	br label %bb38.i + +bb38.i: +	%i.0.i35 = phi i64 [ 1, %entry ], [ %t3, %bb37.i ] +	br label %bb35.i +} diff --git a/test/Transforms/LCSSA/invoke-dest.ll b/test/Transforms/LCSSA/invoke-dest.ll new file mode 100644 index 0000000000000..5c6c7a0a9b525 --- /dev/null +++ b/test/Transforms/LCSSA/invoke-dest.ll @@ -0,0 +1,143 @@ +; RUN: llvm-as < %s | opt -lcssa + +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32" + +@.str12 = external constant [3 x i8], align 1		; <[3 x i8]*> [#uses=1] +@.str17175 = external constant [4 x i8], align 1		; <[4 x i8]*> [#uses=1] +@.str21179 = external constant [12 x i8], align 1		; <[12 x i8]*> [#uses=1] +@.str25183 = external constant [10 x i8], align 1		; <[10 x i8]*> [#uses=1] +@.str32190 = external constant [92 x i8], align 1		; <[92 x i8]*> [#uses=1] +@.str41 = external constant [25 x i8], align 1		; <[25 x i8]*> [#uses=1] + +define void @_ZN8EtherBus10initializeEv() { +entry: +	br i1 undef, label %_ZN7cObjectnwEj.exit, label %bb.i + +bb.i:		; preds = %entry +	br label %_ZN7cObjectnwEj.exit + +_ZN7cObjectnwEj.exit:		; preds = %bb.i, %entry +	invoke void @_ZN7cObjectC2EPKc(i8* undef, i8* getelementptr ([12 x i8]* @.str21179, i32 0, i32 0)) +			to label %bb1 unwind label %lpad + +bb1:		; preds = %_ZN7cObjectnwEj.exit +	br i1 undef, label %_ZNK5cGate4sizeEv.exit, label %bb.i110 + +bb.i110:		; preds = %bb1 +	br label %_ZNK5cGate4sizeEv.exit + +_ZNK5cGate4sizeEv.exit:		; preds = %bb.i110, %bb1 +	br i1 undef, label %_ZNK5cGate4sizeEv.exit122, label %bb.i120 + +bb.i120:		; preds = %_ZNK5cGate4sizeEv.exit +	br label %_ZNK5cGate4sizeEv.exit122 + +_ZNK5cGate4sizeEv.exit122:		; preds = %bb.i120, %_ZNK5cGate4sizeEv.exit +	br i1 undef, label %bb8, label %bb2 + +bb2:		; preds = %_ZNK5cGate4sizeEv.exit122 +	unreachable + +bb8:		; preds = %_ZNK5cGate4sizeEv.exit122 +	%tmp = invoke i8* @_ZN7cModule3parEPKc(i8* undef, i8* getelementptr ([10 x i8]* @.str25183, i32 0, i32 0)) +			to label %invcont9 unwind label %lpad119		; <i8*> [#uses=1] + +invcont9:		; preds = %bb8 +	%tmp1 = invoke i8* @_ZN4cPar11stringValueEv(i8* %tmp) +			to label %invcont10 unwind label %lpad119		; <i8*> [#uses=1] + +invcont10:		; preds = %invcont9 +	invoke void @_ZN8EtherBus8tokenizeEPKcRSt6vectorIdSaIdEE(i8* null, i8* %tmp1, i8* undef) +			to label %invcont11 unwind label %lpad119 + +invcont11:		; preds = %invcont10 +	br i1 undef, label %bb12, label %bb18 + +bb12:		; preds = %invcont11 +	invoke void (i8*, i8*, ...)* @_ZN6cEnvir6printfEPKcz(i8* null, i8* getelementptr ([3 x i8]* @.str12, i32 0, i32 0), i32 undef) +			to label %bb.i.i159 unwind label %lpad119 + +bb.i.i159:		; preds = %bb12 +	unreachable + +bb18:		; preds = %invcont11 +	br i1 undef, label %bb32, label %bb34 + +bb32:		; preds = %bb18 +	br i1 undef, label %bb.i.i123, label %bb34 + +bb.i.i123:		; preds = %bb32 +	br label %bb34 + +bb34:		; preds = %bb.i.i123, %bb32, %bb18 +	%tmp2 = invoke i8* @_Znaj(i32 undef) +			to label %invcont35 unwind label %lpad119		; <i8*> [#uses=0] + +invcont35:		; preds = %bb34 +	br i1 undef, label %bb49, label %bb61 + +bb49:		; preds = %invcont35 +	invoke void (i8*, i8*, ...)* @_ZNK13cSimpleModule5errorEPKcz(i8* undef, i8* getelementptr ([92 x i8]* @.str32190, i32 0, i32 0)) +			to label %bb51 unwind label %lpad119 + +bb51:		; preds = %bb49 +	unreachable + +bb61:		; preds = %invcont35 +	br label %bb106 + +.noexc:		; preds = %bb106 +	invoke void @_ZN7cObjectC2EPKc(i8* undef, i8* getelementptr ([25 x i8]* @.str41, i32 0, i32 0)) +			to label %bb102 unwind label %lpad123 + +bb102:		; preds = %.noexc +	invoke void undef(i8* undef, i8 zeroext 1) +			to label %invcont103 unwind label %lpad119 + +invcont103:		; preds = %bb102 +	invoke void undef(i8* undef, double 1.000000e+07) +			to label %invcont104 unwind label %lpad119 + +invcont104:		; preds = %invcont103 +	%tmp3 = invoke i32 @_ZN13cSimpleModule11sendDelayedEP8cMessagedPKci(i8* undef, i8* undef, double 0.000000e+00, i8* getelementptr ([4 x i8]* @.str17175, i32 0, i32 0), i32 undef) +			to label %invcont105 unwind label %lpad119		; <i32> [#uses=0] + +invcont105:		; preds = %invcont104 +	br label %bb106 + +bb106:		; preds = %invcont105, %bb61 +	%tmp4 = invoke i8* @_Znaj(i32 124) +			to label %.noexc unwind label %lpad119		; <i8*> [#uses=1] + +lpad:		; preds = %_ZN7cObjectnwEj.exit +	br label %Unwind + +lpad119:		; preds = %bb106, %invcont104, %invcont103, %bb102, %bb49, %bb34, %bb12, %invcont10, %invcont9, %bb8 +	unreachable + +lpad123:		; preds = %.noexc +	%tmp5 = icmp eq i8* %tmp4, null		; <i1> [#uses=1] +	br i1 %tmp5, label %Unwind, label %bb.i2 + +bb.i2:		; preds = %lpad123 +	br label %Unwind + +Unwind:		; preds = %bb.i2, %lpad123, %lpad +	unreachable +} + +declare void @_ZN8EtherBus8tokenizeEPKcRSt6vectorIdSaIdEE(i8* nocapture, i8*, i8*) + +declare i8* @_Znaj(i32) + +declare void @_ZN6cEnvir6printfEPKcz(i8* nocapture, i8* nocapture, ...) + +declare void @_ZNK13cSimpleModule5errorEPKcz(i8* nocapture, i8* nocapture, ...) noreturn + +declare i8* @_ZN7cModule3parEPKc(i8*, i8*) + +declare i32 @_ZN13cSimpleModule11sendDelayedEP8cMessagedPKci(i8*, i8*, double, i8*, i32) + +declare void @_ZN7cObjectC2EPKc(i8*, i8*) + +declare i8* @_ZN4cPar11stringValueEv(i8*)  | 
