14ad1ed3aSFlorian Hahn; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 24ad1ed3aSFlorian Hahn; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s 34ad1ed3aSFlorian Hahn 44ad1ed3aSFlorian Hahn 54ad1ed3aSFlorian Hahndeclare void @fn() 64ad1ed3aSFlorian Hahn 74ad1ed3aSFlorian Hahndefine i1 @test_pr54228(i32 %a, i32 %b, i1 %i.0, i1 %i.1) { 84ad1ed3aSFlorian Hahn; CHECK-LABEL: @test_pr54228( 94ad1ed3aSFlorian Hahn; CHECK-NEXT: entry: 104ad1ed3aSFlorian Hahn; CHECK-NEXT: br i1 [[I_0:%.*]], label [[PH_1:%.*]], label [[LOOP_HEADER:%.*]] 114ad1ed3aSFlorian Hahn; CHECK: ph.1: 124ad1ed3aSFlorian Hahn; CHECK-NEXT: [[C_1:%.*]] = icmp eq i32 [[A:%.*]], 0 134ad1ed3aSFlorian Hahn; CHECK-NEXT: call void @llvm.assume(i1 [[C_1]]) 144ad1ed3aSFlorian Hahn; CHECK-NEXT: br label [[LOOP_HEADER]] 154ad1ed3aSFlorian Hahn; CHECK: loop.header: 164ad1ed3aSFlorian Hahn; CHECK-NEXT: br i1 [[I_1:%.*]], label [[LOOP_THEN:%.*]], label [[LOOP_LATCH:%.*]] 174ad1ed3aSFlorian Hahn; CHECK: loop.then: 184ad1ed3aSFlorian Hahn; CHECK-NEXT: call void @fn() 194ad1ed3aSFlorian Hahn; CHECK-NEXT: [[C_2:%.*]] = icmp eq i32 [[B:%.*]], 0 204ad1ed3aSFlorian Hahn; CHECK-NEXT: call void @llvm.assume(i1 [[C_2]]) 214ad1ed3aSFlorian Hahn; CHECK-NEXT: br label [[LOOP_LATCH]] 224ad1ed3aSFlorian Hahn; CHECK: loop.latch: 234ad1ed3aSFlorian Hahn; CHECK-NEXT: [[C_3:%.*]] = icmp eq i32 [[B]], 1 244ad1ed3aSFlorian Hahn; CHECK-NEXT: br i1 [[C_3]], label [[EXIT:%.*]], label [[LOOP_HEADER]] 254ad1ed3aSFlorian Hahn; CHECK: exit: 264ad1ed3aSFlorian Hahn; CHECK-NEXT: [[C_4:%.*]] = icmp eq i32 [[A]], 0 27*542c3351SFlorian Hahn; CHECK-NEXT: ret i1 [[C_4]] 284ad1ed3aSFlorian Hahn; 294ad1ed3aSFlorian Hahnentry: 304ad1ed3aSFlorian Hahn br i1 %i.0, label %ph.1, label %loop.header 314ad1ed3aSFlorian Hahn 324ad1ed3aSFlorian Hahnph.1: ; preds = %entry 334ad1ed3aSFlorian Hahn %c.1 = icmp eq i32 %a, 0 344ad1ed3aSFlorian Hahn call void @llvm.assume(i1 %c.1) 354ad1ed3aSFlorian Hahn br label %loop.header 364ad1ed3aSFlorian Hahn 374ad1ed3aSFlorian Hahnloop.header: ; preds = %loop.latch, %ph.1, %entry 384ad1ed3aSFlorian Hahn br i1 %i.1, label %loop.then, label %loop.latch 394ad1ed3aSFlorian Hahn 404ad1ed3aSFlorian Hahnloop.then: ; preds = %loop.header 414ad1ed3aSFlorian Hahn call void @fn() 424ad1ed3aSFlorian Hahn %c.2 = icmp eq i32 %b, 0 434ad1ed3aSFlorian Hahn call void @llvm.assume(i1 %c.2) 444ad1ed3aSFlorian Hahn br label %loop.latch 454ad1ed3aSFlorian Hahn 464ad1ed3aSFlorian Hahnloop.latch: ; preds = %loop.then, %loop.header 474ad1ed3aSFlorian Hahn %c.3 = icmp eq i32 %b, 1 484ad1ed3aSFlorian Hahn br i1 %c.3, label %exit, label %loop.header 494ad1ed3aSFlorian Hahn 504ad1ed3aSFlorian Hahnexit: ; preds = %loop.latch 514ad1ed3aSFlorian Hahn %c.4 = icmp eq i32 %a, 0 524ad1ed3aSFlorian Hahn ret i1 %c.4 534ad1ed3aSFlorian Hahn} 544ad1ed3aSFlorian Hahn 554ad1ed3aSFlorian Hahndeclare void @llvm.assume(i1 noundef) 56