brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.3 KiB · 155423d Raw
259 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 32; RUN: opt -p constraint-elimination -S %s | FileCheck %s3 4declare void @use(i1)5declare void @llvm.assume(i1)6 7define void @add_rec_decreasing_cond_true_constant(i8 noundef %len) {8; CHECK-LABEL: define void @add_rec_decreasing_cond_true_constant(9; CHECK-SAME: i8 noundef [[LEN:%.*]]) {10; CHECK-NEXT:  entry:11; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]12; CHECK:       loop.header:13; CHECK-NEXT:    [[K_0:%.*]] = phi i8 [ 4, [[ENTRY:%.*]] ], [ [[K_DEC:%.*]], [[LOOP_LATCH:%.*]] ]14; CHECK-NEXT:    [[CMP2_NOT:%.*]] = icmp eq i8 [[K_0]], 015; CHECK-NEXT:    br i1 [[CMP2_NOT]], label [[EXIT:%.*]], label [[LOOP_LATCH]]16; CHECK:       loop.latch:17; CHECK-NEXT:    call void @use(i1 true)18; CHECK-NEXT:    [[K_DEC]] = add i8 [[K_0]], -119; CHECK-NEXT:    br label [[LOOP_HEADER]]20; CHECK:       exit:21; CHECK-NEXT:    ret void22;23entry:24  br label %loop.header25 26loop.header:27  %k.0 = phi i8 [ 4, %entry], [ %k.dec, %loop.latch ]28  %cmp2.not = icmp eq i8 %k.0, 029  br i1 %cmp2.not, label %exit, label %loop.latch30 31loop.latch:32  %cmp.not.i = icmp ult i8 %k.0, 533  call void @use(i1 %cmp.not.i)34  %k.dec = add i8 %k.0, -135  br label %loop.header36 37exit:38  ret void39}40 41define void @add_rec_decreasing_cond_not_true_constant(i8 noundef %len) {42; CHECK-LABEL: define void @add_rec_decreasing_cond_not_true_constant(43; CHECK-SAME: i8 noundef [[LEN:%.*]]) {44; CHECK-NEXT:  entry:45; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]46; CHECK:       loop.header:47; CHECK-NEXT:    [[K_0:%.*]] = phi i8 [ 4, [[ENTRY:%.*]] ], [ [[K_DEC:%.*]], [[LOOP_LATCH:%.*]] ]48; CHECK-NEXT:    [[CMP2_NOT:%.*]] = icmp eq i8 [[K_0]], 049; CHECK-NEXT:    br i1 [[CMP2_NOT]], label [[EXIT:%.*]], label [[LOOP_LATCH]]50; CHECK:       loop.latch:51; CHECK-NEXT:    [[CMP_NOT_I:%.*]] = icmp ult i8 [[K_0]], 452; CHECK-NEXT:    call void @use(i1 [[CMP_NOT_I]])53; CHECK-NEXT:    [[K_DEC]] = add i8 [[K_0]], -154; CHECK-NEXT:    br label [[LOOP_HEADER]]55; CHECK:       exit:56; CHECK-NEXT:    ret void57;58entry:59  br label %loop.header60 61loop.header:62  %k.0 = phi i8 [ 4, %entry], [ %k.dec, %loop.latch ]63  %cmp2.not = icmp eq i8 %k.0, 064  br i1 %cmp2.not, label %exit, label %loop.latch65 66loop.latch:67  %cmp.not.i = icmp ult i8 %k.0, 468  call void @use(i1 %cmp.not.i)69  %k.dec = add i8 %k.0, -170  br label %loop.header71 72exit:73  ret void74}75 76define void @add_rec_decreasing_cond_true_start_signed_positive(i8 noundef %start) {77; CHECK-LABEL: define void @add_rec_decreasing_cond_true_start_signed_positive(78; CHECK-SAME: i8 noundef [[START:%.*]]) {79; CHECK-NEXT:  entry:80; CHECK-NEXT:    [[PRECOND:%.*]] = icmp sge i8 [[START]], 181; CHECK-NEXT:    call void @llvm.assume(i1 [[PRECOND]])82; CHECK-NEXT:    [[START_1:%.*]] = add i8 [[START]], -183; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]84; CHECK:       loop.header:85; CHECK-NEXT:    [[K_0:%.*]] = phi i8 [ [[START_1]], [[ENTRY:%.*]] ], [ [[K_DEC:%.*]], [[LOOP_LATCH:%.*]] ]86; CHECK-NEXT:    [[CMP2_NOT:%.*]] = icmp eq i8 [[K_0]], 087; CHECK-NEXT:    br i1 [[CMP2_NOT]], label [[EXIT:%.*]], label [[LOOP_LATCH]]88; CHECK:       loop.latch:89; CHECK-NEXT:    call void @use(i1 true)90; CHECK-NEXT:    [[K_DEC]] = add i8 [[K_0]], -191; CHECK-NEXT:    br label [[LOOP_HEADER]]92; CHECK:       exit:93; CHECK-NEXT:    ret void94;95entry:96  %precond = icmp sge i8 %start, 197  call void @llvm.assume(i1 %precond)98  %start.1 = add i8 %start, -199  br label %loop.header100 101loop.header:102  %k.0 = phi i8 [ %start.1, %entry], [ %k.dec, %loop.latch ]103  %cmp2.not = icmp eq i8 %k.0, 0104  br i1 %cmp2.not, label %exit, label %loop.latch105 106loop.latch:107  %cmp.not.i = icmp ult i8 %k.0, %start108  call void @use(i1 %cmp.not.i)109  %k.dec = add i8 %k.0, -1110  br label %loop.header111 112exit:113  ret void114}115 116define void @add_rec_decreasing_cond_not_true_start_signed_positive(i8 noundef %start) {117; CHECK-LABEL: define void @add_rec_decreasing_cond_not_true_start_signed_positive(118; CHECK-SAME: i8 noundef [[START:%.*]]) {119; CHECK-NEXT:  entry:120; CHECK-NEXT:    [[PRECOND:%.*]] = icmp sge i8 [[START]], 1121; CHECK-NEXT:    call void @llvm.assume(i1 [[PRECOND]])122; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]123; CHECK:       loop.header:124; CHECK-NEXT:    [[K_0:%.*]] = phi i8 [ [[START]], [[ENTRY:%.*]] ], [ [[K_DEC:%.*]], [[LOOP_LATCH:%.*]] ]125; CHECK-NEXT:    [[CMP2_NOT:%.*]] = icmp eq i8 [[K_0]], 0126; CHECK-NEXT:    br i1 [[CMP2_NOT]], label [[EXIT:%.*]], label [[LOOP_LATCH]]127; CHECK:       loop.latch:128; CHECK-NEXT:    [[CMP_NOT_I:%.*]] = icmp ult i8 [[K_0]], [[START]]129; CHECK-NEXT:    call void @use(i1 [[CMP_NOT_I]])130; CHECK-NEXT:    [[K_DEC]] = add i8 [[K_0]], -1131; CHECK-NEXT:    br label [[LOOP_HEADER]]132; CHECK:       exit:133; CHECK-NEXT:    ret void134;135entry:136  %precond = icmp sge i8 %start, 1137  call void @llvm.assume(i1 %precond)138  br label %loop.header139 140loop.header:141  %k.0 = phi i8 [ %start, %entry], [ %k.dec, %loop.latch ]142  %cmp2.not = icmp eq i8 %k.0, 0143  br i1 %cmp2.not, label %exit, label %loop.latch144 145loop.latch:146  %cmp.not.i = icmp ult i8 %k.0, %start147  call void @use(i1 %cmp.not.i)148  %k.dec = add i8 %k.0, -1149  br label %loop.header150 151exit:152  ret void153}154 155define void @add_rec_decreasing_add_rec_positive_to_negative(i8 noundef %len) {156; CHECK-LABEL: define void @add_rec_decreasing_add_rec_positive_to_negative(157; CHECK-SAME: i8 noundef [[LEN:%.*]]) {158; CHECK-NEXT:  entry:159; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]160; CHECK:       loop.header:161; CHECK-NEXT:    [[K_0:%.*]] = phi i8 [ 4, [[ENTRY:%.*]] ], [ [[K_DEC:%.*]], [[LOOP_LATCH:%.*]] ]162; CHECK-NEXT:    [[CMP2_NOT:%.*]] = icmp eq i8 [[K_0]], -2163; CHECK-NEXT:    br i1 [[CMP2_NOT]], label [[EXIT:%.*]], label [[LOOP_LATCH]]164; CHECK:       loop.latch:165; CHECK-NEXT:    [[CMP_NOT_I:%.*]] = icmp ult i8 [[K_0]], 5166; CHECK-NEXT:    call void @use(i1 [[CMP_NOT_I]])167; CHECK-NEXT:    [[K_DEC]] = add i8 [[K_0]], -1168; CHECK-NEXT:    br label [[LOOP_HEADER]]169; CHECK:       exit:170; CHECK-NEXT:    ret void171;172entry:173  br label %loop.header174 175loop.header:176  %k.0 = phi i8 [ 4, %entry], [ %k.dec, %loop.latch ]177  %cmp2.not = icmp eq i8 %k.0, -2178  br i1 %cmp2.not, label %exit, label %loop.latch179 180loop.latch:181  %cmp.not.i = icmp ult i8 %k.0, 5182  call void @use(i1 %cmp.not.i)183  %k.dec = add i8 %k.0, -1184  br label %loop.header185 186exit:187  ret void188}189 190define void @add_rec_decreasing_2_cond_true_constant(i8 noundef %len) {191; CHECK-LABEL: define void @add_rec_decreasing_2_cond_true_constant(192; CHECK-SAME: i8 noundef [[LEN:%.*]]) {193; CHECK-NEXT:  entry:194; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]195; CHECK:       loop.header:196; CHECK-NEXT:    [[K_0:%.*]] = phi i8 [ 4, [[ENTRY:%.*]] ], [ [[K_DEC:%.*]], [[LOOP_LATCH:%.*]] ]197; CHECK-NEXT:    [[CMP2_NOT:%.*]] = icmp eq i8 [[K_0]], 0198; CHECK-NEXT:    br i1 [[CMP2_NOT]], label [[EXIT:%.*]], label [[LOOP_LATCH]]199; CHECK:       loop.latch:200; CHECK-NEXT:    [[CMP_NOT_I:%.*]] = icmp ult i8 [[K_0]], 5201; CHECK-NEXT:    call void @use(i1 [[CMP_NOT_I]])202; CHECK-NEXT:    [[K_DEC]] = add i8 [[K_0]], -2203; CHECK-NEXT:    br label [[LOOP_HEADER]]204; CHECK:       exit:205; CHECK-NEXT:    ret void206;207entry:208  br label %loop.header209 210loop.header:211  %k.0 = phi i8 [ 4, %entry], [ %k.dec, %loop.latch ]212  %cmp2.not = icmp eq i8 %k.0, 0213  br i1 %cmp2.not, label %exit, label %loop.latch214 215loop.latch:216  %cmp.not.i = icmp ult i8 %k.0, 5217  call void @use(i1 %cmp.not.i)218  %k.dec = add i8 %k.0, -2219  br label %loop.header220 221exit:222  ret void223}224 225define void @add_rec_decreasing_2_cond_not_true_constant(i8 noundef %len) {226; CHECK-LABEL: define void @add_rec_decreasing_2_cond_not_true_constant(227; CHECK-SAME: i8 noundef [[LEN:%.*]]) {228; CHECK-NEXT:  entry:229; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]230; CHECK:       loop.header:231; CHECK-NEXT:    [[K_0:%.*]] = phi i8 [ 5, [[ENTRY:%.*]] ], [ [[K_DEC:%.*]], [[LOOP_LATCH:%.*]] ]232; CHECK-NEXT:    [[CMP2_NOT:%.*]] = icmp eq i8 [[K_0]], 0233; CHECK-NEXT:    br i1 [[CMP2_NOT]], label [[EXIT:%.*]], label [[LOOP_LATCH]]234; CHECK:       loop.latch:235; CHECK-NEXT:    [[CMP_NOT_I:%.*]] = icmp ult i8 [[K_0]], 5236; CHECK-NEXT:    call void @use(i1 [[CMP_NOT_I]])237; CHECK-NEXT:    [[K_DEC]] = add i8 [[K_0]], -2238; CHECK-NEXT:    br label [[LOOP_HEADER]]239; CHECK:       exit:240; CHECK-NEXT:    ret void241;242entry:243  br label %loop.header244 245loop.header:246  %k.0 = phi i8 [ 5, %entry], [ %k.dec, %loop.latch ]247  %cmp2.not = icmp eq i8 %k.0, 0248  br i1 %cmp2.not, label %exit, label %loop.latch249 250loop.latch:251  %cmp.not.i = icmp ult i8 %k.0, 5252  call void @use(i1 %cmp.not.i)253  %k.dec = add i8 %k.0, -2254  br label %loop.header255 256exit:257  ret void258}259