11; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2- ; RUN: llc -mtriple arm -- -mattr=+vfp4 %s -o - | FileCheck %s
2+ ; RUN: llc -mtriple armv7 -- -mattr=+vfp4 %s -o - | FileCheck %s
33
44
55; Div whose result is unused should be removed unless we have strict exceptions
66
77define void @unused_div (float %x , float %y ) {
88; CHECK-LABEL: unused_div:
99; CHECK: @ %bb.0: @ %entry
10- ; CHECK-NEXT: mov pc, lr
10+ ; CHECK-NEXT: bx lr
1111entry:
1212 %add = fdiv float %x , %y
1313 ret void
@@ -19,7 +19,7 @@ define void @unused_div_fpexcept_strict(float %x, float %y) #0 {
1919; CHECK-NEXT: vmov s0, r1
2020; CHECK-NEXT: vmov s2, r0
2121; CHECK-NEXT: vdiv.f32 s0, s2, s0
22- ; CHECK-NEXT: mov pc, lr
22+ ; CHECK-NEXT: bx lr
2323entry:
2424 %add = call float @llvm.experimental.constrained.fdiv.f32 (float %x , float %y , metadata !"round.tonearest" , metadata !"fpexcept.strict" ) #0
2525 ret void
2828define void @unused_div_round_dynamic (float %x , float %y ) #0 {
2929; CHECK-LABEL: unused_div_round_dynamic:
3030; CHECK: @ %bb.0: @ %entry
31- ; CHECK-NEXT: mov pc, lr
31+ ; CHECK-NEXT: bx lr
3232entry:
3333 %add = call float @llvm.experimental.constrained.fdiv.f32 (float %x , float %y , metadata !"round.dynamic" , metadata !"fpexcept.ignore" ) #0
3434 ret void
@@ -44,9 +44,10 @@ define float @add_twice(float %x, float %y, i32 %n) {
4444; CHECK-NEXT: cmp r2, #0
4545; CHECK-NEXT: vmov s2, r0
4646; CHECK-NEXT: vadd.f32 s0, s2, s0
47- ; CHECK-NEXT: vmulne.f32 s0, s0, s0
48- ; CHECK-NEXT: vmov r0, s0
49- ; CHECK-NEXT: mov pc, lr
47+ ; CHECK-NEXT: vmul.f32 s2, s0, s0
48+ ; CHECK-NEXT: vmoveq.f32 s2, s0
49+ ; CHECK-NEXT: vmov r0, s2
50+ ; CHECK-NEXT: bx lr
5051entry:
5152 %add = fadd float %x , %y
5253 %tobool.not = icmp eq i32 %n , 0
@@ -72,7 +73,7 @@ define float @add_twice_fpexcept_strict(float %x, float %y, i32 %n) #0 {
7273; CHECK-NEXT: vaddne.f32 s2, s4, s2
7374; CHECK-NEXT: vmulne.f32 s0, s0, s2
7475; CHECK-NEXT: vmov r0, s0
75- ; CHECK-NEXT: mov pc, lr
76+ ; CHECK-NEXT: bx lr
7677entry:
7778 %add = call float @llvm.experimental.constrained.fadd.f32 (float %x , float %y , metadata !"round.tonearest" , metadata !"fpexcept.strict" ) #0
7879 %tobool.not = icmp eq i32 %n , 0
@@ -97,7 +98,7 @@ define float @add_twice_round_dynamic(float %x, float %y, i32 %n) #0 {
9798; CHECK-NEXT: vadd.f32 s0, s2, s0
9899; CHECK-NEXT: vmulne.f32 s0, s0, s0
99100; CHECK-NEXT: vmov r0, s0
100- ; CHECK-NEXT: mov pc, lr
101+ ; CHECK-NEXT: bx lr
101102entry:
102103 %add = call float @llvm.experimental.constrained.fadd.f32 (float %x , float %y , metadata !"round.dynamic" , metadata !"fpexcept.ignore" ) #0
103104 %tobool.not = icmp eq i32 %n , 0
@@ -131,7 +132,7 @@ define float @set_rounding(float %x, float %y) {
131132; CHECK-NEXT: vmrs r1, fpscr
132133; CHECK-NEXT: bic r1, r1, #12582912
133134; CHECK-NEXT: vmsr fpscr, r1
134- ; CHECK-NEXT: mov pc, lr
135+ ; CHECK-NEXT: bx lr
135136entry:
136137 %add1 = fadd float %x , %y
137138 call void @llvm.set.rounding (i32 0 )
@@ -156,7 +157,7 @@ define float @set_rounding_fpexcept_strict(float %x, float %y) #0 {
156157; CHECK-NEXT: vmsr fpscr, r0
157158; CHECK-NEXT: vsub.f32 s0, s4, s0
158159; CHECK-NEXT: vmov r0, s0
159- ; CHECK-NEXT: mov pc, lr
160+ ; CHECK-NEXT: bx lr
160161entry:
161162 %add1 = call float @llvm.experimental.constrained.fadd.f32 (float %x , float %y , metadata !"round.tonearest" , metadata !"fpexcept.strict" ) #0
162163 call void @llvm.set.rounding (i32 0 ) #0
@@ -181,7 +182,7 @@ define float @set_rounding_round_dynamic(float %x, float %y) #0 {
181182; CHECK-NEXT: vmsr fpscr, r0
182183; CHECK-NEXT: vsub.f32 s0, s4, s0
183184; CHECK-NEXT: vmov r0, s0
184- ; CHECK-NEXT: mov pc, lr
185+ ; CHECK-NEXT: bx lr
185186entry:
186187 %add1 = call float @llvm.experimental.constrained.fadd.f32 (float %x , float %y , metadata !"round.dynamic" , metadata !"fpexcept.ignore" ) #0
187188 call void @llvm.set.rounding (i32 0 ) #0
0 commit comments