[ARM] Refactor the prologue/epilogue emission to be more robust.
[oota-llvm.git] / test / CodeGen / ARM / fold-stack-adjust.ll
index 695a20b5976d575e7f15ef0383186ab9c401e81f..b62d0dfee07d88a83c6e100684e9f4ac0a03010e 100644 (file)
@@ -71,7 +71,7 @@ define void @check_vfp_fold() minsize {
 ; CHECK-IOS-LABEL: check_vfp_fold:
 ; CHECK-IOS: push {r0, r1, r2, r3, r4, r7, lr}
 ; CHECK-IOS: sub.w r4, sp, #16
-; CHECK-IOS: bic r4, r4, #15
+; CHECK-IOS: bfc r4, #0, #4
 ; CHECK-IOS: mov sp, r4
 ; CHECK-IOS: vst1.64 {d8, d9}, [r4:128]
 ; ...
@@ -82,7 +82,7 @@ define void @check_vfp_fold() minsize {
 
   %var = alloca i8, i32 16
 
-  %tmp = load %bigVec* @var
+  %tmp = load %bigVec, %bigVec* @var
   call void @bar(i8* %var)
   store %bigVec %tmp, %bigVec* @var
 
@@ -119,7 +119,7 @@ define arm_aapcs_vfpcc double @check_vfp_no_return_clobber() minsize {
 
   %var = alloca i8, i32 64
 
-  %tmp = load %bigVec* @var
+  %tmp = load %bigVec, %bigVec* @var
   call void @bar(i8* %var)
   store %bigVec %tmp, %bigVec* @var
 
@@ -152,7 +152,7 @@ define void @test_fold_point(i1 %tst) minsize {
 
   ; We want a long-lived floating register so that a callee-saved dN is used and
   ; there's both a vpop and a pop.
-  %live_val = load double* @dbl
+  %live_val = load double, double* @dbl
   br i1 %tst, label %true, label %end
 true:
   call void @bar(i8* %var)
@@ -167,12 +167,12 @@ end:
 define void @test_varsize(...) minsize {
 ; CHECK-T1-LABEL: test_varsize:
 ; CHECK-T1: sub        sp, #16
-; CHECK-T1: push       {r2, r3, r4, r5, r7, lr}
+; CHECK-T1: push       {r5, r6, r7, lr}
 ; ...
-; CHECK-T1: pop        {r2, r3, r4, r5, r7}
-; CHECK-T1: pop        {r3}
+; CHECK-T1: pop        {r2, r3, r7}
+; CHECK-T1: pop {[[POP_REG:r[0-3]]]}
 ; CHECK-T1: add        sp, #16
-; CHECK-T1: bx r3
+; CHECK-T1: bx [[POP_REG]]
 
 ; CHECK-LABEL: test_varsize:
 ; CHECK: sub   sp, #16
@@ -183,6 +183,7 @@ define void @test_varsize(...) minsize {
 ; CHECK: bx    lr
 
   %var = alloca i8, i32 8
+  call void @llvm.va_start(i8* %var)
   call void @bar(i8* %var)
   ret void
 }
@@ -216,3 +217,5 @@ if.then:                                          ; preds = %entry
 exit:                                             ; preds = %if.then, %entry
   ret float %call1
 }
+
+declare void @llvm.va_start(i8*) nounwind