1175d68ddSFlorian Hahn; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2175d68ddSFlorian Hahn; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s 3175d68ddSFlorian Hahn 4175d68ddSFlorian Hahndefine i1 @test_conds_single_use_in_different_blocks(i8 %x) { 5175d68ddSFlorian Hahn; CHECK-LABEL: @test_conds_single_use_in_different_blocks( 6175d68ddSFlorian Hahn; CHECK-NEXT: entry: 7175d68ddSFlorian Hahn; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[X:%.*]], 10 8175d68ddSFlorian Hahn; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i8 [[X]], 5 9175d68ddSFlorian Hahn; CHECK-NEXT: br i1 [[C_1]], label [[THEN:%.*]], label [[ELSE:%.*]] 10175d68ddSFlorian Hahn; CHECK: then: 116c25c58aSFlorian Hahn; CHECK-NEXT: ret i1 true 12175d68ddSFlorian Hahn; CHECK: else: 13175d68ddSFlorian Hahn; CHECK-NEXT: ret i1 [[C_2]] 14175d68ddSFlorian Hahn; 15175d68ddSFlorian Hahnentry: 16175d68ddSFlorian Hahn %c.1 = icmp ugt i8 %x, 10 17175d68ddSFlorian Hahn %t.1 = icmp ugt i8 %x, 5 18175d68ddSFlorian Hahn %c.2 = icmp ugt i8 %x, 5 19175d68ddSFlorian Hahn br i1 %c.1, label %then, label %else 20175d68ddSFlorian Hahn 21175d68ddSFlorian Hahnthen: 22175d68ddSFlorian Hahn ret i1 %t.1 23175d68ddSFlorian Hahn 24175d68ddSFlorian Hahnelse: 25175d68ddSFlorian Hahn ret i1 %c.2 26175d68ddSFlorian Hahn} 27175d68ddSFlorian Hahn 28175d68ddSFlorian Hahn 29175d68ddSFlorian Hahndefine i1 @test_conds_single_use_in_different_blocks_2(i8 %x, i8 %y) { 30175d68ddSFlorian Hahn; CHECK-LABEL: @test_conds_single_use_in_different_blocks_2( 31175d68ddSFlorian Hahn; CHECK-NEXT: entry: 32175d68ddSFlorian Hahn; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[X:%.*]], 10 33*13ffde31SFlorian Hahn; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i8 [[Y:%.*]], [[X]] 34175d68ddSFlorian Hahn; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i8 [[Y]], 5 35175d68ddSFlorian Hahn; CHECK-NEXT: br i1 [[C_1]], label [[THEN_1:%.*]], label [[ELSE:%.*]] 36175d68ddSFlorian Hahn; CHECK: then.1: 37175d68ddSFlorian Hahn; CHECK-NEXT: br i1 [[C_2]], label [[THEN_2:%.*]], label [[ELSE]] 38175d68ddSFlorian Hahn; CHECK: then.2: 396c25c58aSFlorian Hahn; CHECK-NEXT: ret i1 true 40175d68ddSFlorian Hahn; CHECK: else: 41175d68ddSFlorian Hahn; CHECK-NEXT: ret i1 [[C_3]] 42175d68ddSFlorian Hahn; 43175d68ddSFlorian Hahnentry: 44175d68ddSFlorian Hahn %c.1 = icmp ugt i8 %x, 10 45175d68ddSFlorian Hahn %t.1 = icmp ugt i8 %y, 5 46175d68ddSFlorian Hahn %c.2 = icmp ugt i8 %y, %x 47175d68ddSFlorian Hahn %c.3 = icmp ugt i8 %y, 5 48175d68ddSFlorian Hahn br i1 %c.1, label %then.1, label %else 49175d68ddSFlorian Hahn 50175d68ddSFlorian Hahnthen.1: 51175d68ddSFlorian Hahn br i1 %c.2, label %then.2, label %else 52175d68ddSFlorian Hahn 53175d68ddSFlorian Hahnthen.2: 54175d68ddSFlorian Hahn ret i1 %t.1 55175d68ddSFlorian Hahn 56175d68ddSFlorian Hahnelse: 57175d68ddSFlorian Hahn ret i1 %c.3 58175d68ddSFlorian Hahn} 59175d68ddSFlorian Hahn 60175d68ddSFlorian Hahndeclare void @llvm.assume(i1) 61175d68ddSFlorian Hahn 62175d68ddSFlorian Hahn; Only the use of %t.1 in %then.2 could be simplified, but not the one in 63175d68ddSFlorian Hahn; %entry. 64175d68ddSFlorian Hahndefine i1 @test_conds_multiple_uses_in_different_blocks_2(i8 %x, i8 %y) { 65175d68ddSFlorian Hahn; CHECK-LABEL: @test_conds_multiple_uses_in_different_blocks_2( 66175d68ddSFlorian Hahn; CHECK-NEXT: entry: 67175d68ddSFlorian Hahn; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[X:%.*]], 10 68175d68ddSFlorian Hahn; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i8 [[Y:%.*]], 5 69175d68ddSFlorian Hahn; CHECK-NEXT: call void @llvm.assume(i1 [[T_1]]) 70175d68ddSFlorian Hahn; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i8 [[Y]], [[X]] 71175d68ddSFlorian Hahn; CHECK-NEXT: br i1 [[C_1]], label [[THEN_1:%.*]], label [[ELSE:%.*]] 72175d68ddSFlorian Hahn; CHECK: then.1: 73175d68ddSFlorian Hahn; CHECK-NEXT: br i1 [[C_2]], label [[THEN_2:%.*]], label [[ELSE]] 74175d68ddSFlorian Hahn; CHECK: then.2: 75175d68ddSFlorian Hahn; CHECK-NEXT: ret i1 true 76175d68ddSFlorian Hahn; CHECK: else: 77175d68ddSFlorian Hahn; CHECK-NEXT: ret i1 true 78175d68ddSFlorian Hahn; 79175d68ddSFlorian Hahnentry: 80175d68ddSFlorian Hahn %c.1 = icmp ugt i8 %x, 10 81175d68ddSFlorian Hahn %t.1 = icmp ugt i8 %y, 5 82175d68ddSFlorian Hahn call void @llvm.assume(i1 %t.1) 83175d68ddSFlorian Hahn %c.2 = icmp ugt i8 %y, %x 84175d68ddSFlorian Hahn %c.3 = icmp ugt i8 %y, 5 85175d68ddSFlorian Hahn br i1 %c.1, label %then.1, label %else 86175d68ddSFlorian Hahn 87175d68ddSFlorian Hahnthen.1: 88175d68ddSFlorian Hahn br i1 %c.2, label %then.2, label %else 89175d68ddSFlorian Hahn 90175d68ddSFlorian Hahnthen.2: 91175d68ddSFlorian Hahn ret i1 %t.1 92175d68ddSFlorian Hahn 93175d68ddSFlorian Hahnelse: 94175d68ddSFlorian Hahn ret i1 %c.3 95175d68ddSFlorian Hahn} 96