1 ; RUN: llc -mtriple=thumbv8.1m.main-arm-none-eabi -mattr=+lob,+mve.fp -disable-arm-loloops=false %s -o - | FileCheck %s
3 ; CHECK-LABEL: test_target_specific:
7 ; CHECK: [[LOOP_HEADER:\.LBB[0-9_]+]]:
8 ; CHECK: le lr, [[LOOP_HEADER]]
12 define i32 @test_target_specific(i32* %a, i32* %b) {
16 %acc = phi i32 [ 0, %entry ], [ %res, %loop ]
17 %count = phi i32 [ 0, %entry ], [ %count.next, %loop ]
18 %addr.a = getelementptr i32, i32* %a, i32 %count
19 %addr.b = getelementptr i32, i32* %b, i32 %count
20 %load.a = load i32, i32* %addr.a
21 %load.b = load i32, i32* %addr.b
22 %res = call i32 @llvm.arm.smlad(i32 %load.a, i32 %load.b, i32 %acc)
23 %count.next = add nuw i32 %count, 2
24 %cmp = icmp ne i32 %count.next, 100
25 br i1 %cmp, label %loop, label %exit
30 ; CHECK-LABEL: test_fabs:
31 ; CHECK: mov.w lr, #100
34 ; CHECK: [[LOOP_HEADER:\.LBB[0-9_]+]]:
36 ; CHECK: le lr, [[LOOP_HEADER]]
40 define float @test_fabs(float* %a) {
44 %acc = phi float [ 0.0, %entry ], [ %res, %loop ]
45 %count = phi i32 [ 0, %entry ], [ %count.next, %loop ]
46 %addr.a = getelementptr float, float* %a, i32 %count
47 %load.a = load float, float* %addr.a
48 %abs = call float @llvm.fabs.f32(float %load.a)
49 %res = fadd float %abs, %acc
50 %count.next = add nuw i32 %count, 1
51 %cmp = icmp ne i32 %count.next, 100
52 br i1 %cmp, label %loop, label %exit
57 declare i32 @llvm.arm.smlad(i32, i32, i32)
58 declare float @llvm.fabs.f32(float)