brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 7149e72 Raw
160 lines · plain
1; RUN: llc < %s -mtriple=thumbv7m -mattr=-no-branch-predictor | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-BP2; RUN: llc < %s -mtriple=thumbv7m -mcpu=cortex-m3 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NOBP3 4declare void @otherfn()5 6; CHECK-LABEL: triangle1:7; CHECK: itt ne8; CHECK: movne9; CHECK: strne10define i32 @triangle1(i32 %n, ptr %p) {11entry:12  %tobool = icmp eq i32 %n, 013  br i1 %tobool, label %if.end, label %if.then14 15if.then:16  store i32 1, ptr %p, align 417  br label %if.end18 19if.end:20  tail call void @otherfn()21  ret i32 022}23 24; CHECK-LABEL: triangle2:25; CHECK-BP: itttt ne26; CHECK-BP: movne27; CHECK-BP: strne28; CHECK-BP: movne29; CHECK-BP: strne30; CHECK-NOBP: cbz31; CHECK-NOBP: movs32; CHECK-NOBP: str33; CHECK-NOBP: movs34; CHECK-NOBP: str35define i32 @triangle2(i32 %n, ptr %p, ptr %q) {36entry:37  %tobool = icmp eq i32 %n, 038  br i1 %tobool, label %if.end, label %if.then39 40if.then:41  store i32 1, ptr %p, align 442  store i32 2, ptr %q, align 443  br label %if.end44 45if.end:46  tail call void @otherfn()47  ret i32 048}49 50; CHECK-LABEL: triangle3:51; CHECK: cbz52; CHECK: movs53; CHECK: str54; CHECK: movs55; CHECK: str56; CHECK: movs57; CHECK: str58define i32 @triangle3(i32 %n, ptr %p, ptr %q, ptr %r) {59entry:60  %tobool = icmp eq i32 %n, 061  br i1 %tobool, label %if.end, label %if.then62 63if.then:64  store i32 1, ptr %p, align 465  store i32 2, ptr %q, align 466  store i32 3, ptr %r, align 467  store i32 4, ptr %p, align 468  br label %if.end69 70if.end:71  tail call void @otherfn()72  ret i32 073}74 75; CHECK-LABEL: diamond1:76; CHECK: itee eq77; CHECK: ldreq78; CHECK: strne79define i32 @diamond1(i32 %n, ptr %p) {80entry:81  %tobool = icmp eq i32 %n, 082  br i1 %tobool, label %if.else, label %if.then83 84if.then:85  store i32 %n, ptr %p, align 486  br label %if.end87 88if.else:89  %0 = load i32, ptr %p, align 490  br label %if.end91 92if.end:93  %n.addr.0 = phi i32 [ %n, %if.then ], [ %0, %if.else ]94  tail call void @otherfn()95  ret i32 %n.addr.096}97 98; CHECK-LABEL: diamond2:99; CHECK-BP: cbz100; CHECK-BP: str101; CHECK-BP: str102; CHECK-BP: b103; CHECK-BP: str104; CHECK-BP: add105; CHECK-NOBP: ittee106; CHECK-NOBP: streq107; CHECK-NOBP: addeq108; CHECK-NOBP: strne109; CHECK-NOBP: strne110define i32 @diamond2(i32 %n, ptr %p, ptr %q) {111entry:112  %tobool = icmp eq i32 %n, 0113  br i1 %tobool, label %if.else, label %if.then114 115if.then:116  store i32 %n, ptr %p, align 4117  %arrayidx = getelementptr inbounds i32, ptr %p, i32 2118  store i32 %n, ptr %arrayidx, align 4119  br label %if.end120 121if.else:122  store i32 %n, ptr %q, align 4123  %0 = add i32 %n, 10124  br label %if.end125 126if.end:127  %n.addr.0 = phi i32 [ %n, %if.then ], [ %0, %if.else ]128  tail call void @otherfn()129  ret i32 %n.addr.0130}131 132; CHECK-LABEL: diamond3:133; CHECK: cbz134; CHECK: movs135; CHECK: str136; CHECK: b137; CHECK: ldr138; CHECK: ldr139; CHECK: adds140define i32 @diamond3(i32 %n, ptr %p, ptr %q) {141entry:142  %tobool = icmp eq i32 %n, 0143  br i1 %tobool, label %if.else, label %if.then144 145if.then:146  store i32 1, ptr %p, align 4147  br label %if.end148 149if.else:150  %0 = load i32, ptr %p, align 4151  %1 = load i32, ptr %q, align 4152  %add = add nsw i32 %1, %0153  br label %if.end154 155if.end:156  %n.addr.0 = phi i32 [ %n, %if.then ], [ %add, %if.else ]157  tail call void @otherfn()158  ret i32 %n.addr.0159}160