brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.2 KiB · b127361 Raw
231 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s3 4declare void @use(i1)5 6define void @iv_known_non_negative_iv_constant_trip_count_uge() {7; CHECK-LABEL: @iv_known_non_negative_iv_constant_trip_count_uge(8; CHECK-NEXT:  entry:9; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]10; CHECK:       loop.header:11; CHECK-NEXT:    [[IV:%.*]] = phi i8 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]12; CHECK-NEXT:    [[CMP:%.*]] = icmp uge i8 [[IV]], 213; CHECK-NEXT:    br i1 [[CMP]], label [[LOOP_LATCH]], label [[EXIT_1:%.*]]14; CHECK:       loop.latch:15; CHECK-NEXT:    call void @use(i1 true)16; CHECK-NEXT:    call void @use(i1 true)17; CHECK-NEXT:    call void @use(i1 false)18; CHECK-NEXT:    call void @use(i1 false)19; CHECK-NEXT:    [[IV_NEXT]] = add nuw nsw i8 [[IV]], 120; CHECK-NEXT:    br label [[LOOP_HEADER]]21; CHECK:       exit.1:22; CHECK-NEXT:    ret void23;24entry:25  br label %loop.header26 27loop.header:28  %iv = phi i8 [ 0, %entry ], [ %iv.next, %loop.latch ]29  %cmp = icmp uge i8 %iv, 230  br i1 %cmp, label %loop.latch, label %exit.131 32loop.latch:33  %t.1 = icmp uge i8 %iv, 234  call void @use(i1 %t.1)35  %t.2 = icmp sge i8 %iv, 236  call void @use(i1 %t.2)37  %f.1 = icmp ult i8 %iv, 238  call void @use(i1 %f.1)39  %f.2 = icmp slt i8 %iv, 240  call void @use(i1 %f.2)41  %iv.next = add nsw nuw i8 %iv, 142  br label %loop.header43 44exit.1:45  ret void46}47 48define void @iv_known_non_negative_iv_variable_trip_count_uge(i8 %N) {49; CHECK-LABEL: @iv_known_non_negative_iv_variable_trip_count_uge(50; CHECK-NEXT:  entry:51; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]52; CHECK:       loop.header:53; CHECK-NEXT:    [[IV:%.*]] = phi i8 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]54; CHECK-NEXT:    [[CMP:%.*]] = icmp uge i8 [[IV]], [[N:%.*]]55; CHECK-NEXT:    br i1 [[CMP]], label [[LOOP_LATCH]], label [[EXIT_1:%.*]]56; CHECK:       loop.latch:57; CHECK-NEXT:    call void @use(i1 true)58; CHECK-NEXT:    call void @use(i1 true)59; CHECK-NEXT:    call void @use(i1 false)60; CHECK-NEXT:    call void @use(i1 false)61; CHECK-NEXT:    [[C_0:%.*]] = icmp ugt i8 [[IV]], 262; CHECK-NEXT:    call void @use(i1 [[C_0]])63; CHECK-NEXT:    [[IV_NEXT]] = add nuw nsw i8 [[IV]], 164; CHECK-NEXT:    br label [[LOOP_HEADER]]65; CHECK:       exit.1:66; CHECK-NEXT:    ret void67;68entry:69  br label %loop.header70 71loop.header:72  %iv = phi i8 [ 0, %entry ], [ %iv.next, %loop.latch ]73  %cmp = icmp uge i8 %iv, %N74  br i1 %cmp, label %loop.latch, label %exit.175 76loop.latch:77  %t.1 = icmp uge i8 %iv, %N78  call void @use(i1 %t.1)79  %t.2 = icmp sge i8 %iv, %N80  call void @use(i1 %t.2)81  %f.1 = icmp ult i8 %iv, %N82  call void @use(i1 %f.1)83  %f.2 = icmp slt i8 %iv, %N84  call void @use(i1 %f.2)85  %c.0 = icmp ugt i8 %iv, 286  call void @use(i1 %c.0)87  %iv.next = add nsw nuw i8 %iv, 188  br label %loop.header89 90exit.1:91  ret void92}93 94define void @iv_known_non_negative_iv_variable_trip_count_uge_operands_swapped(i8 %N) {95; CHECK-LABEL: @iv_known_non_negative_iv_variable_trip_count_uge_operands_swapped(96; CHECK-NEXT:  entry:97; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]98; CHECK:       loop.header:99; CHECK-NEXT:    [[IV:%.*]] = phi i8 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]100; CHECK-NEXT:    [[CMP:%.*]] = icmp uge i8 [[N:%.*]], [[IV]]101; CHECK-NEXT:    br i1 [[CMP]], label [[LOOP_LATCH]], label [[EXIT_1:%.*]]102; CHECK:       loop.latch:103; CHECK-NEXT:    call void @use(i1 true)104; CHECK-NEXT:    [[T_2:%.*]] = icmp sge i8 [[N]], [[IV]]105; CHECK-NEXT:    call void @use(i1 [[T_2]])106; CHECK-NEXT:    call void @use(i1 false)107; CHECK-NEXT:    [[F_2:%.*]] = icmp slt i8 [[N]], [[IV]]108; CHECK-NEXT:    call void @use(i1 [[F_2]])109; CHECK-NEXT:    [[IV_NEXT]] = add nuw nsw i8 [[IV]], 1110; CHECK-NEXT:    br label [[LOOP_HEADER]]111; CHECK:       exit.1:112; CHECK-NEXT:    ret void113;114entry:115  br label %loop.header116 117loop.header:118  %iv = phi i8 [ 0, %entry ], [ %iv.next, %loop.latch ]119  %cmp = icmp uge i8 %N, %iv120  br i1 %cmp, label %loop.latch, label %exit.1121 122loop.latch:123  %t.1 = icmp uge i8 %N, %iv124  call void @use(i1 %t.1)125  %t.2 = icmp sge i8 %N, %iv126  call void @use(i1 %t.2)127  %f.1 = icmp ult i8 %N, %iv128  call void @use(i1 %f.1)129  %f.2 = icmp slt i8 %N, %iv130  call void @use(i1 %f.2)131  %iv.next = add nsw nuw i8 %iv, 1132  br label %loop.header133 134exit.1:135  ret void136}137 138define void @iv_known_non_negative_iv_variable_trip_count_ugt(i8 %N) {139; CHECK-LABEL: @iv_known_non_negative_iv_variable_trip_count_ugt(140; CHECK-NEXT:  entry:141; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]142; CHECK:       loop.header:143; CHECK-NEXT:    [[IV:%.*]] = phi i8 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]144; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i8 [[IV]], [[N:%.*]]145; CHECK-NEXT:    br i1 [[CMP]], label [[LOOP_LATCH]], label [[EXIT_1:%.*]]146; CHECK:       loop.latch:147; CHECK-NEXT:    call void @use(i1 true)148; CHECK-NEXT:    call void @use(i1 true)149; CHECK-NEXT:    call void @use(i1 false)150; CHECK-NEXT:    call void @use(i1 false)151; CHECK-NEXT:    [[C_0:%.*]] = icmp ugt i8 [[IV]], 2152; CHECK-NEXT:    call void @use(i1 [[C_0]])153; CHECK-NEXT:    [[IV_NEXT]] = add nuw nsw i8 [[IV]], 1154; CHECK-NEXT:    br label [[LOOP_HEADER]]155; CHECK:       exit.1:156; CHECK-NEXT:    ret void157;158entry:159  br label %loop.header160 161loop.header:162  %iv = phi i8 [ 0, %entry ], [ %iv.next, %loop.latch ]163  %cmp = icmp ugt i8 %iv, %N164  br i1 %cmp, label %loop.latch, label %exit.1165 166loop.latch:167  %t.1 = icmp ugt i8 %iv, %N168  call void @use(i1 %t.1)169  %t.2 = icmp sgt i8 %iv, %N170  call void @use(i1 %t.2)171  %f.1 = icmp ult i8 %iv, %N172  call void @use(i1 %f.1)173  %f.2 = icmp slt i8 %iv, %N174  call void @use(i1 %f.2)175  %c.0 = icmp ugt i8 %iv, 2176  call void @use(i1 %c.0)177  %iv.next = add nsw nuw i8 %iv, 1178  br label %loop.header179 180exit.1:181  ret void182}183 184define void @iv_known_non_negative_iv_variable_trip_count_ugt_operands_swapped(i8 %N) {185; CHECK-LABEL: @iv_known_non_negative_iv_variable_trip_count_ugt_operands_swapped(186; CHECK-NEXT:  entry:187; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]188; CHECK:       loop.header:189; CHECK-NEXT:    [[IV:%.*]] = phi i8 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP_LATCH:%.*]] ]190; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i8 [[N:%.*]], [[IV]]191; CHECK-NEXT:    br i1 [[CMP]], label [[LOOP_LATCH]], label [[EXIT_1:%.*]]192; CHECK:       loop.latch:193; CHECK-NEXT:    call void @use(i1 true)194; CHECK-NEXT:    [[T_2:%.*]] = icmp sgt i8 [[N]], [[IV]]195; CHECK-NEXT:    call void @use(i1 [[T_2]])196; CHECK-NEXT:    call void @use(i1 false)197; CHECK-NEXT:    [[F_2:%.*]] = icmp slt i8 [[N]], [[IV]]198; CHECK-NEXT:    call void @use(i1 [[F_2]])199; CHECK-NEXT:    [[C_0:%.*]] = icmp ugt i8 [[IV]], 2200; CHECK-NEXT:    call void @use(i1 [[C_0]])201; CHECK-NEXT:    [[IV_NEXT]] = add nuw nsw i8 [[IV]], 1202; CHECK-NEXT:    br label [[LOOP_HEADER]]203; CHECK:       exit.1:204; CHECK-NEXT:    ret void205;206entry:207  br label %loop.header208 209loop.header:210  %iv = phi i8 [ 0, %entry ], [ %iv.next, %loop.latch ]211  %cmp = icmp ugt i8 %N, %iv212  br i1 %cmp, label %loop.latch, label %exit.1213 214loop.latch:215  %t.1 = icmp ugt i8 %N, %iv216  call void @use(i1 %t.1)217  %t.2 = icmp sgt i8 %N, %iv218  call void @use(i1 %t.2)219  %f.1 = icmp ult i8 %N, %iv220  call void @use(i1 %f.1)221  %f.2 = icmp slt i8 %N, %iv222  call void @use(i1 %f.2)223  %c.0 = icmp ugt i8 %iv, 2224  call void @use(i1 %c.0)225  %iv.next = add nsw nuw i8 %iv, 1226  br label %loop.header227 228exit.1:229  ret void230}231