1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s 3 4declare void @may_unwind() 5 6define i1 @test_switch_in_block_with_assume(i32 %x) { 7; CHECK-LABEL: @test_switch_in_block_with_assume( 8; CHECK-NEXT: entry: 9; CHECK-NEXT: call void @may_unwind() 10; CHECK-NEXT: [[C_1:%.*]] = icmp ult i32 [[X:%.*]], 10 11; CHECK-NEXT: call void @llvm.assume(i1 [[C_1]]) 12; CHECK-NEXT: switch i32 0, label [[EXIT_1:%.*]] [ 13; CHECK-NEXT: i32 1, label [[EXIT_2:%.*]] 14; CHECK-NEXT: ] 15; CHECK: exit.1: 16; CHECK-NEXT: [[T_1:%.*]] = icmp ult i32 [[X]], 10 17; CHECK-NEXT: [[C_2:%.*]] = icmp ult i32 [[X]], 9 18; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, [[C_2]] 19; CHECK-NEXT: ret i1 [[RES_1]] 20; CHECK: exit.2: 21; CHECK-NEXT: [[T_2:%.*]] = icmp ult i32 [[X]], 10 22; CHECK-NEXT: [[C_3:%.*]] = icmp ult i32 [[X]], 9 23; CHECK-NEXT: [[RES_2:%.*]] = xor i1 true, [[C_3]] 24; CHECK-NEXT: ret i1 [[RES_2]] 25; 26entry: 27 call void @may_unwind() 28 %c.1 = icmp ult i32 %x, 10 29 call void @llvm.assume(i1 %c.1) 30 switch i32 0, label %exit.1 [ 31 i32 1, label %exit.2 32 ] 33 34exit.1: 35 %t.1 = icmp ult i32 %x, 10 36 %c.2 = icmp ult i32 %x, 9 37 %res.1 = xor i1 %t.1, %c.2 38 ret i1 %res.1 39 40exit.2: 41 %t.2 = icmp ult i32 %x, 10 42 %c.3 = icmp ult i32 %x, 9 43 %res.2 = xor i1 %t.2, %c.3 44 ret i1 %res.2 45} 46 47declare void @llvm.assume(i1) 48