1eecba950SDavid Green; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+lob,+mve.fp -disable-arm-loloops=true %s -o - | FileCheck %s --check-prefix=DISABLED 2eecba950SDavid Green; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+lob,+mve.fp %s -o - | FileCheck %s 3e3a4a13fSSam Parker 4e3a4a13fSSam Parker; DISABLED-NOT: dls lr, 5152dd3b8SDavid Green 6152dd3b8SDavid Green; CHECK-LABEL: test_target_specific: 773a6cd4bSDavid Green; CHECK: mov.w lr, #50 848230355SDavid Green; CHECK-NOT: dls lr, lr 9152dd3b8SDavid Green; CHECK-NOT: mov lr, 10152dd3b8SDavid Green; CHECK: [[LOOP_HEADER:\.LBB[0-9_]+]]: 11152dd3b8SDavid Green; CHECK: le lr, [[LOOP_HEADER]] 12152dd3b8SDavid Green; CHECK-NOT: b . 13152dd3b8SDavid Green; CHECK: @ %exit 14152dd3b8SDavid Green 15*d17f4f26SMatt Arsenaultdefine i32 @test_target_specific(ptr %a, ptr %b) { 16152dd3b8SDavid Greenentry: 17152dd3b8SDavid Green br label %loop 18152dd3b8SDavid Greenloop: 19152dd3b8SDavid Green %acc = phi i32 [ 0, %entry ], [ %res, %loop ] 20152dd3b8SDavid Green %count = phi i32 [ 0, %entry ], [ %count.next, %loop ] 21*d17f4f26SMatt Arsenault %addr.a = getelementptr i32, ptr %a, i32 %count 22*d17f4f26SMatt Arsenault %addr.b = getelementptr i32, ptr %b, i32 %count 23*d17f4f26SMatt Arsenault %load.a = load i32, ptr %addr.a 24*d17f4f26SMatt Arsenault %load.b = load i32, ptr %addr.b 25152dd3b8SDavid Green %res = call i32 @llvm.arm.smlad(i32 %load.a, i32 %load.b, i32 %acc) 26152dd3b8SDavid Green %count.next = add nuw i32 %count, 2 27152dd3b8SDavid Green %cmp = icmp ne i32 %count.next, 100 28152dd3b8SDavid Green br i1 %cmp, label %loop, label %exit 29152dd3b8SDavid Greenexit: 30152dd3b8SDavid Green ret i32 %res 31152dd3b8SDavid Green} 32152dd3b8SDavid Green 33152dd3b8SDavid Green; CHECK-LABEL: test_fabs: 3473a6cd4bSDavid Green; CHECK: mov.w lr, #100 3548230355SDavid Green; CHECK-NOT: dls lr, lr 36152dd3b8SDavid Green; CHECK-NOT: mov lr, 37152dd3b8SDavid Green; CHECK: [[LOOP_HEADER:\.LBB[0-9_]+]]: 38152dd3b8SDavid Green; CHECK-NOT: bl 39152dd3b8SDavid Green; CHECK: le lr, [[LOOP_HEADER]] 40152dd3b8SDavid Green; CHECK-NOT: b . 41152dd3b8SDavid Green; CHECK: @ %exit 42152dd3b8SDavid Green 43*d17f4f26SMatt Arsenaultdefine float @test_fabs(ptr %a) { 44152dd3b8SDavid Greenentry: 45152dd3b8SDavid Green br label %loop 46152dd3b8SDavid Greenloop: 47152dd3b8SDavid Green %acc = phi float [ 0.0, %entry ], [ %res, %loop ] 48152dd3b8SDavid Green %count = phi i32 [ 0, %entry ], [ %count.next, %loop ] 49*d17f4f26SMatt Arsenault %addr.a = getelementptr float, ptr %a, i32 %count 50*d17f4f26SMatt Arsenault %load.a = load float, ptr %addr.a 51152dd3b8SDavid Green %abs = call float @llvm.fabs.f32(float %load.a) 52152dd3b8SDavid Green %res = fadd float %abs, %acc 53152dd3b8SDavid Green %count.next = add nuw i32 %count, 1 54152dd3b8SDavid Green %cmp = icmp ne i32 %count.next, 100 55152dd3b8SDavid Green br i1 %cmp, label %loop, label %exit 56152dd3b8SDavid Greenexit: 57152dd3b8SDavid Green ret float %res 58152dd3b8SDavid Green} 59152dd3b8SDavid Green 60152dd3b8SDavid Greendeclare i32 @llvm.arm.smlad(i32, i32, i32) 61152dd3b8SDavid Greendeclare float @llvm.fabs.f32(float) 62