brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.5 KiB · d648f82 Raw
238 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes2; RUN: opt < %s -passes=loop-deletion -verify-dom-info -S | FileCheck %s3 4;; Original C Code:5;;  void unknown_tripcount_mustprogress_attr_mustprogress_loopmd(int a, int b) {6;;    for (; a < b;) ;7;;    for (;;) ;8;;  }9 10define void @unknown_tripcount_mustprogress_attr_mustprogress_loopmd(i32 %a, i32 %b) #0 {11; CHECK: Function Attrs: mustprogress12; CHECK-LABEL: define {{[^@]+}}@unknown_tripcount_mustprogress_attr_mustprogress_loopmd13; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]]) [[ATTR0:#.*]] {14; CHECK-NEXT:  entry:15; CHECK-NEXT:    br label [[FOR_END:%.*]]16; CHECK:       for.end:17; CHECK-NEXT:    unreachable18;19entry:20  br label %for.cond21for.cond:22  %cmp = icmp slt i32 %a, %b23  br i1 %cmp, label %for.body, label %for.end24for.body:25  br label %for.cond, !llvm.loop !226for.end:27  br label %for.cond128for.cond1:29  br label %for.cond130}31 32;; Original C Code:33;;  void unknown_tripcount_mustprogress_attr_no_mustprogress_loopmd(int a, int b) {34;;    for (; a < b;) ;35;;    for (;;) ;36;;  }37;;  => Removed mustprogress loop attribute38 39define void @unknown_tripcount_mustprogress_attr_no_mustprogess_loopmd(i32 %a, i32 %b) #0 {40; CHECK: Function Attrs: mustprogress41; CHECK-LABEL: define {{[^@]+}}@unknown_tripcount_mustprogress_attr_no_mustprogess_loopmd42; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]]) [[ATTR0]] {43; CHECK-NEXT:  entry:44; CHECK-NEXT:    br label [[FOR_END:%.*]]45; CHECK:       for.end:46; CHECK-NEXT:    unreachable47;48entry:49  br label %for.cond50for.cond:51  %cmp = icmp slt i32 %a, %b52  br i1 %cmp, label %for.body, label %for.end53for.body:54  br label %for.cond55for.end:56  br label %for.cond157for.cond1:58  br label %for.cond159}60 61;; Original C Code:62;;  void known_tripcount_no_mustprogress_attr_no_mustprogress_loopmd() {63;;    for (int i = 0; i < 5; i++) ;64;;  }65 66define void @known_tripcount_no_mustprogress_attr_no_mustprogress_loopmd() {67; CHECK-LABEL: define {{[^@]+}}@known_tripcount_no_mustprogress_attr_no_mustprogress_loopmd() {68; CHECK-NEXT:  entry:69; CHECK-NEXT:    br label [[FOR_END:%.*]]70; CHECK:       for.end:71; CHECK-NEXT:    ret void72;73entry:74  br label %for.cond75for.cond:76  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]77  %cmp = icmp slt i32 %i.0, 578  br i1 %cmp, label %for.body, label %for.end79for.body:80  br label %for.inc81for.inc:82  %inc = add nsw i32 %i.0, 183  br label %for.cond84for.end:85  ret void86}87 88;; Original C Code:89;;  void known_tripcount_no_mustprogress_attr_mustprogress_loopmd() {90;;    for (int i = 0; i < 5; i++) ;91;;  }92;;  => Added mustprogress loop attribute93 94define void @known_tripcount_no_mustprogress_attr_mustprogress_loopmd() {95; CHECK-LABEL: define {{[^@]+}}@known_tripcount_no_mustprogress_attr_mustprogress_loopmd() {96; CHECK-NEXT:  entry:97; CHECK-NEXT:    br label [[FOR_END:%.*]]98; CHECK:       for.end:99; CHECK-NEXT:    ret void100;101entry:102  br label %for.cond103for.cond:104  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]105  %cmp = icmp slt i32 %i.0, 5106  br i1 %cmp, label %for.body, label %for.end107for.body:108  br label %for.inc109for.inc:110  %inc = add nsw i32 %i.0, 1111  br label %for.cond, !llvm.loop !4112for.end:113  ret void114}115 116;; Original C Code:117;;  void known_tripcount_mustprogress_attr_no_mustprogress_loopmd() {118;;    for (int i = 0; i < 5; i++) ;119;;  }120;;  => Added mustprogress function attribute121 122define void @known_tripcount_mustprogress_attr_no_mustprogress_loopmd() #0 {123; CHECK: Function Attrs: mustprogress124; CHECK-LABEL: define {{[^@]+}}@known_tripcount_mustprogress_attr_no_mustprogress_loopmd125; CHECK-SAME: () [[ATTR0]] {126; CHECK-NEXT:  entry:127; CHECK-NEXT:    br label [[FOR_END:%.*]]128; CHECK:       for.end:129; CHECK-NEXT:    ret void130;131entry:132  br label %for.cond133for.cond:134  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]135  %cmp = icmp slt i32 %i.0, 5136  br i1 %cmp, label %for.body, label %for.end137for.body:138  br label %for.inc139for.inc:140  %inc = add nsw i32 %i.0, 1141  br label %for.cond142for.end:143  ret void144}145 146;; Original C Code:147;;  void known_tripcount_mustprogress_attr_mustprogress_loopmd() {148;;    for (int i = 0; i < 5; i++) ;149;;  }150;;  => Added mustprogress function and mustprogress loop attribute151 152define void @known_tripcount_mustprogress_attr_mustprogress_loopmd() #0 {153; CHECK: Function Attrs: mustprogress154; CHECK-LABEL: define {{[^@]+}}@known_tripcount_mustprogress_attr_mustprogress_loopmd155; CHECK-SAME: () [[ATTR0]] {156; CHECK-NEXT:  entry:157; CHECK-NEXT:    br label [[FOR_END:%.*]]158; CHECK:       for.end:159; CHECK-NEXT:    ret void160;161entry:162  br label %for.cond163for.cond:164  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]165  %cmp = icmp slt i32 %i.0, 5166  br i1 %cmp, label %for.body, label %for.end167for.body:168  br label %for.inc169for.inc:170  %inc = add nsw i32 %i.0, 1171  br label %for.cond, !llvm.loop !5172for.end:173  ret void174}175 176;; Original C Code:177;;  void unknown_tripcount_no_mustprogress_attr_mustprogress_loopmd(int a, int b) {178;;    for (; a < b;) ;179;;  }180;;  => Added mustprogress loop attribute181 182define void @unknown_tripcount_no_mustprogress_attr_mustprogress_loopmd(i32 %a, i32 %b) {183; CHECK-LABEL: define {{[^@]+}}@unknown_tripcount_no_mustprogress_attr_mustprogress_loopmd184; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]]) {185; CHECK-NEXT:  entry:186; CHECK-NEXT:    br label [[FOR_END:%.*]]187; CHECK:       for.end:188; CHECK-NEXT:    ret void189;190entry:191  br label %for.cond192for.cond:193  %cmp = icmp slt i32 %a, %b194  br i1 %cmp, label %for.body, label %for.end195for.body:196  br label %for.cond, !llvm.loop !6197for.end:198  ret void199}200 201;; Original C Code:202;;  void unknown_tripcount_no_mustprogress_attr_no_mustprogress_loopmd(int a, int b) {203;;    for (; a < b;) ;204;;  }205 206define void @unknown_tripcount_no_mustprogress_attr_no_mustprogress_loopmd(i32 %a, i32 %b) {207; CHECK-LABEL: define {{[^@]+}}@unknown_tripcount_no_mustprogress_attr_no_mustprogress_loopmd208; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]]) {209; CHECK-NEXT:  entry:210; CHECK-NEXT:    br label [[FOR_COND:%.*]]211; CHECK:       for.cond:212; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i32 [[A]], [[B]]213; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]]214; CHECK:       for.body:215; CHECK-NEXT:    br label [[FOR_COND]]216; CHECK:       for.end:217; CHECK-NEXT:    ret void218;219entry:220  br label %for.cond221for.cond:222  %cmp = icmp slt i32 %a, %b223  br i1 %cmp, label %for.body, label %for.end224for.body:225  br label %for.cond226for.end:227  ret void228}229 230; CHECK: attributes [[ATTR0]] = { mustprogress }231 232attributes #0 = { mustprogress }233!2 = distinct !{!2, !3}234!3 = !{!"llvm.loop.mustprogress"}235!4 = distinct !{!4, !3}236!5 = distinct !{!5, !3}237!6 = distinct !{!6, !3}238