[InstCombine] Signed saturation tests. NFC
[llvm-complete.git] / test / Transforms / HardwareLoops / ARM / calls-codegen.ll
blob2771235d576e5287f1f948578763f3ef00bc7144
1 ; RUN: llc -mtriple=thumbv8.1m.main-arm-none-eabi -mattr=+lob,+mve.fp -disable-arm-loloops=true %s -o - | FileCheck %s --check-prefix=DISABLED
2 ; RUN: llc -mtriple=thumbv8.1m.main-arm-none-eabi -mattr=+lob,+mve.fp %s -o - | FileCheck %s
4 ; DISABLED-NOT: dls lr,
6 ; CHECK-LABEL: test_target_specific:
7 ; CHECK:        mov.w lr, #50
8 ; CHECK:        dls lr, lr
9 ; CHECK-NOT:    mov lr,
10 ; CHECK:      [[LOOP_HEADER:\.LBB[0-9_]+]]:
11 ; CHECK:        le lr, [[LOOP_HEADER]]
12 ; CHECK-NOT:    b .
13 ; CHECK:      @ %exit
15 define i32 @test_target_specific(i32* %a, i32* %b) {
16 entry:
17   br label %loop
18 loop:
19   %acc = phi i32 [ 0, %entry ], [ %res, %loop ]
20   %count = phi i32 [ 0, %entry ], [ %count.next, %loop ]
21   %addr.a = getelementptr i32, i32* %a, i32 %count
22   %addr.b = getelementptr i32, i32* %b, i32 %count
23   %load.a = load i32, i32* %addr.a
24   %load.b = load i32, i32* %addr.b
25   %res = call i32 @llvm.arm.smlad(i32 %load.a, i32 %load.b, i32 %acc)
26   %count.next = add nuw i32 %count, 2
27   %cmp = icmp ne i32 %count.next, 100
28   br i1 %cmp, label %loop, label %exit
29 exit:
30   ret i32 %res
33 ; CHECK-LABEL: test_fabs:
34 ; CHECK:        mov.w lr, #100
35 ; CHECK:        dls lr, lr
36 ; CHECK-NOT:    mov lr,
37 ; CHECK:      [[LOOP_HEADER:\.LBB[0-9_]+]]:
38 ; CHECK-NOT:    bl
39 ; CHECK:        le lr, [[LOOP_HEADER]]
40 ; CHECK-NOT:    b .
41 ; CHECK:      @ %exit
43 define float @test_fabs(float* %a) {
44 entry:
45   br label %loop
46 loop:
47   %acc = phi float [ 0.0, %entry ], [ %res, %loop ]
48   %count = phi i32 [ 0, %entry ], [ %count.next, %loop ]
49   %addr.a = getelementptr float, float* %a, i32 %count
50   %load.a = load float, float* %addr.a
51   %abs = call float @llvm.fabs.f32(float %load.a)
52   %res = fadd float %abs, %acc
53   %count.next = add nuw i32 %count, 1
54   %cmp = icmp ne i32 %count.next, 100
55   br i1 %cmp, label %loop, label %exit
56 exit:
57   ret float %res
60 declare i32 @llvm.arm.smlad(i32, i32, i32)
61 declare float @llvm.fabs.f32(float)