brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · f5f74ef Raw
113 lines · plain
1; RUN: opt -passes=correlated-propagation -S < %s | FileCheck %s2 3declare void @llvm.experimental.guard(i1,...)4 5define i1 @test1(i32 %a) {6; CHECK-LABEL: @test1(7; CHECK: %alive = icmp eq i32 %a, 88; CHECK-NEXT: %result = or i1 false, %alive9  %cmp = icmp ult i32 %a, 1610  call void(i1,...) @llvm.experimental.guard(i1 %cmp) [ "deopt"() ]11  %dead = icmp eq i32 %a, 1612  %alive = icmp eq i32 %a, 813  %result = or i1 %dead, %alive14  ret i1 %result15}16 17define i1 @test2(i32 %a) {18; CHECK-LABEL: @test2(19; CHECK: continue:20; CHECK-NEXT: %alive = icmp eq i32 %a, 821; CHECK-NEXT: %result = or i1 false, %alive22  %cmp = icmp ult i32 %a, 1623  call void(i1,...) @llvm.experimental.guard(i1 %cmp) [ "deopt"() ]24  br label %continue25 26continue:27  %dead = icmp eq i32 %a, 1628  %alive = icmp eq i32 %a, 829  %result = or i1 %dead, %alive30  ret i1 %result31}32 33define i1 @test3(i32 %a, i1 %flag) {34; CHECK-LABEL: @test3(35; CHECK: continue:36; CHECK-NEXT: %alive.1 = icmp eq i32 %a, 1637; CHECK-NEXT: %alive.2 = icmp eq i32 %a, 838; CHECK-NEXT: %result = or i1 %alive.1, %alive.239  br i1 %flag, label %true, label %false40 41true:42  %cmp = icmp ult i32 %a, 1643  call void(i1,...) @llvm.experimental.guard(i1 %cmp) [ "deopt"() ]44  br label %continue45 46false:47  br label %continue48 49continue:50  %alive.1 = icmp eq i32 %a, 1651  %alive.2 = icmp eq i32 %a, 852  %result = or i1 %alive.1, %alive.253  ret i1 %result54}55 56define i1 @test4(i32 %a, i1 %flag) {57; CHECK-LABEL: @test4(58; CHECK: continue:59; CHECK-NEXT: %alive = icmp eq i32 %a, 1260; CHECK-NEXT: %result = or i1 false, %alive61  br i1 %flag, label %true, label %false62 63true:64  %cmp.t = icmp ult i32 %a, 1665  call void(i1,...) @llvm.experimental.guard(i1 %cmp.t) [ "deopt"() ]66  br label %continue67 68false:69  %cmp.f = icmp ult i32 %a, 1270  call void(i1,...) @llvm.experimental.guard(i1 %cmp.f) [ "deopt"() ]71  br label %continue72 73continue:74  %dead = icmp eq i32 %a, 1675  %alive = icmp eq i32 %a, 1276  %result = or i1 %dead, %alive77  ret i1 %result78}79 80define i1 @test5(i32 %a) {81; CHECK-LABEL: @test5(82; CHECK: continue:83; CHECK-NEXT: %alive = icmp eq i32 %a.plus.8, 1684; CHECK-NEXT: %result = or i1 false, %alive85  %cmp = icmp ult i32 %a, 1686  call void(i1,...) @llvm.experimental.guard(i1 %cmp) [ "deopt"() ]87  %a.plus.8 = add i32 %a, 888  br label %continue89 90continue:91  %dead = icmp eq i32 %a.plus.8, 2492  %alive = icmp eq i32 %a.plus.8, 1693  %result = or i1 %dead, %alive94  ret i1 %result95}96 97; Check that we handle the case when the guard is the very first instruction in98; a basic block.99define i1 @test6(i32 %a) {100; CHECK-LABEL: @test6(101; CHECK: %alive = icmp eq i32 %a, 8102; CHECK-NEXT: %result = or i1 false, %alive103  %cmp = icmp ult i32 %a, 16104  br label %continue105 106continue:107  call void(i1,...) @llvm.experimental.guard(i1 %cmp) [ "deopt"() ]108  %dead = icmp eq i32 %a, 16109  %alive = icmp eq i32 %a, 8110  %result = or i1 %dead, %alive111  ret i1 %result112}113