diff options
Diffstat (limited to 'test/CodeGen/Thumb2')
-rw-r--r-- | test/CodeGen/Thumb2/aligned-spill.ll | 8 | ||||
-rw-r--r-- | test/CodeGen/Thumb2/constant-islands-jump-table.ll | 47 | ||||
-rw-r--r-- | test/CodeGen/Thumb2/constant-islands-new-island-padding.ll | 42 | ||||
-rw-r--r-- | test/CodeGen/Thumb2/ifcvt-neon.ll | 6 | ||||
-rw-r--r-- | test/CodeGen/Thumb2/thumb2-cmn.ll | 2 | ||||
-rw-r--r-- | test/CodeGen/Thumb2/thumb2-spill-q.ll | 2 |
6 files changed, 98 insertions, 9 deletions
diff --git a/test/CodeGen/Thumb2/aligned-spill.ll b/test/CodeGen/Thumb2/aligned-spill.ll index 3a2803f..4ef294b 100644 --- a/test/CodeGen/Thumb2/aligned-spill.ll +++ b/test/CodeGen/Thumb2/aligned-spill.ll @@ -9,7 +9,7 @@ target triple = "thumbv7-apple-ios" ; ; The caller-saved r4 is used as a scratch register for stack realignment. ; CHECK: push {r4, r7, lr} -; CHECK: bic r4, r4, #7 +; CHECK: bfc r4, #0, #3 ; CHECK: mov sp, r4 define void @f(double* nocapture %p) nounwind ssp { entry: @@ -23,7 +23,7 @@ entry: ; NEON: f ; NEON: push {r4, r7, lr} ; NEON: sub.w r4, sp, #64 -; NEON: bic r4, r4, #15 +; NEON: bfc r4, #0, #4 ; Stack pointer must be updated before the spills. ; NEON: mov sp, r4 ; NEON: vst1.64 {d8, d9, d10, d11}, [r4:128]! @@ -54,7 +54,7 @@ entry: ; NEON: f7 ; NEON: push {r4, r7, lr} ; NEON: sub.w r4, sp, #56 -; NEON: bic r4, r4, #15 +; NEON: bfc r4, #0, #4 ; Stack pointer must be updated before the spills. ; NEON: mov sp, r4 ; NEON: vst1.64 {d8, d9, d10, d11}, [r4:128]! @@ -81,7 +81,7 @@ entry: ; NEON: push {r4, r7, lr} ; NEON: vpush {d12, d13, d14, d15} ; NEON: sub.w r4, sp, #24 -; NEON: bic r4, r4, #15 +; NEON: bfc r4, #0, #4 ; Stack pointer must be updated before the spills. ; NEON: mov sp, r4 ; NEON: vst1.64 {d8, d9}, [r4:128] diff --git a/test/CodeGen/Thumb2/constant-islands-jump-table.ll b/test/CodeGen/Thumb2/constant-islands-jump-table.ll new file mode 100644 index 0000000..0dd7092 --- /dev/null +++ b/test/CodeGen/Thumb2/constant-islands-jump-table.ll @@ -0,0 +1,47 @@ +; RUN: llc < %s -mtriple=thumbv7-linux-gnueabihf -O1 %s -o - | FileCheck %s + +; CHECK-LABEL: test_jump_table: +; CHECK: b .LBB +; CHECK-NOT: tbh + +define i32 @test_jump_table(i32 %x, float %in) { + +h1: + + %b0 = fadd float %in, 1234.5 + %b1 = fptoui float %b0 to i32 + + switch i32 %x, label %h2 [ + i32 0, label %h3 + i32 2, label %h4 + i32 4, label %h5 + i32 6, label %h6 + ] + +h2: + %a0 = add i32 %x, 5 + br label %h3 + +h3: + %d2 = phi i32 [%b1, %h1], [%a0, %h2] + %d3 = add i32 %d2, 3 + br label %h4 + +h4: + %c2 = phi i32 [%b1, %h1], [%d3, %h3] + %c3 = add i32 %c2, 5 + br label %h5 + +h5: + %a2 = phi i32 [%b1, %h1], [%c3, %h4] + %a3 = add i32 %a2, 6 + br label %h6 + +h6: + %y = phi i32 [0, %h1], [%a3, %h5] + call i32 @llvm.arm.space(i32 2000, i32 undef) + ret i32 %y + +} + +declare i32 @llvm.arm.space(i32, i32) diff --git a/test/CodeGen/Thumb2/constant-islands-new-island-padding.ll b/test/CodeGen/Thumb2/constant-islands-new-island-padding.ll new file mode 100644 index 0000000..991b043 --- /dev/null +++ b/test/CodeGen/Thumb2/constant-islands-new-island-padding.ll @@ -0,0 +1,42 @@ +; RUN: llc < %s -mtriple=thumbv7-apple-ios %s -o - | FileCheck %s + +@g0 = common global i32 0, align 4 +@d0 = common global double 0.000000e+00, align 8 +@f0 = common global float 0.000000e+00, align 4 +@g1 = common global i32 0, align 4 + +declare i32 @llvm.arm.space(i32, i32) + +; Check that the constant island pass moves the float constant pool entry inside +; the function. + +; CHECK: .long 1067320814 @ float 1.23455596 +; CHECK: {{.*}} %do.end + +define i32 @testpadding(i32 %a) { +entry: + %0 = load i32* @g0, align 4 + %add = add nsw i32 %0, 12 + store i32 %add, i32* @g0, align 4 + %1 = load double* @d0, align 8 + %add1 = fadd double %1, 0x3FF3C0B8ED46EACB + store double %add1, double* @d0, align 8 + %tmpcall11 = call i32 @llvm.arm.space(i32 28, i32 undef) + call void @foo20(i32 191) + %2 = load float* @f0, align 4 + %add2 = fadd float %2, 0x3FF3C0BDC0000000 + store float %add2, float* @f0, align 4 + br label %do.body + +do.body: ; preds = %do.body, %entry + tail call void @foo20(i32 19) + %3 = load i32* @g1, align 4 + %tobool = icmp eq i32 %3, 0 + br i1 %tobool, label %do.end, label %do.body + +do.end: ; preds = %do.body + %tmpcall111 = call i32 @llvm.arm.space(i32 954, i32 undef) + ret i32 10 +} + +declare void @foo20(i32) diff --git a/test/CodeGen/Thumb2/ifcvt-neon.ll b/test/CodeGen/Thumb2/ifcvt-neon.ll index 501b0b6..00f3399 100644 --- a/test/CodeGen/Thumb2/ifcvt-neon.ll +++ b/test/CodeGen/Thumb2/ifcvt-neon.ll @@ -12,9 +12,9 @@ entry: br i1 %0, label %bb, label %bb1 bb: ; preds = %entry -; CHECK: ite lt -; CHECK: vsublt.f32 -; CHECK-NEXT: vaddge.f32 +; CHECK: vsub.f32 +; CHECK-NEXT: vadd.f32 +; CHECK: it gt %3 = fadd float %1, %2 ; <float> [#uses=1] br label %bb2 diff --git a/test/CodeGen/Thumb2/thumb2-cmn.ll b/test/CodeGen/Thumb2/thumb2-cmn.ll index efa1505..0f361d7 100644 --- a/test/CodeGen/Thumb2/thumb2-cmn.ll +++ b/test/CodeGen/Thumb2/thumb2-cmn.ll @@ -79,7 +79,7 @@ define void @f9(i32 %a, i32 %b) nounwind optsize { ret void } -!0 = metadata !{i32 81} +!0 = !{i32 81} ; CHECK-LABEL: f9: ; CHECK: cmn.w r0, r1 diff --git a/test/CodeGen/Thumb2/thumb2-spill-q.ll b/test/CodeGen/Thumb2/thumb2-spill-q.ll index 94f4725..d1deb46 100644 --- a/test/CodeGen/Thumb2/thumb2-spill-q.ll +++ b/test/CodeGen/Thumb2/thumb2-spill-q.ll @@ -11,7 +11,7 @@ declare <4 x float> @llvm.arm.neon.vld1.v4f32(i8*, i32) nounwind readonly define void @aaa(%quuz* %this, i8* %block) { ; CHECK-LABEL: aaa: -; CHECK: bic r4, r4, #15 +; CHECK: bfc r4, #0, #4 ; CHECK: vst1.64 {{.*}}[{{.*}}:128] ; CHECK: vld1.64 {{.*}}[{{.*}}:128] entry: |