Remove br i1 undef from some regression tests [NFC] (#115130)

As defined in LangRef, branching on `undef` is undefined behavior.
This PR aims to remove undefined behavior from tests. As UB tests break
Alive2 and may be the root cause of breaking future optimizations.

Here's an Alive2 proof for one of the examples:
https://alive2.llvm.org/ce/z/TncxhP
This commit is contained in:
Lee Wei
2024-11-07 16:11:15 +08:00
committed by GitHub
parent ae5bfa0cef
commit 1469d82e1c
90 changed files with 650 additions and 648 deletions

View File

@@ -20,10 +20,10 @@ declare void @llvm.lifetime.end.p0(i64, ptr nocapture)
; This function is one where if we didn't free basicaa after memcpyopt then the
; usage of basicaa in instcombine would cause a segfault due to stale phi-values
; results being used.
define void @fn(ptr %this, ptr %ptr) personality ptr @__gxx_personality_v0 {
define void @fn(ptr %this, ptr %ptr, i1 %arg) personality ptr @__gxx_personality_v0 {
entry:
%arr = alloca [4 x i8], align 8
br i1 undef, label %then, label %if
br i1 %arg, label %then, label %if
if:
br label %then
@@ -50,7 +50,7 @@ lpad:
; When running instcombine after memdep, the basicaa used by instcombine uses
; the phivalues that memdep used. This would then cause a segfault due to
; instcombine deleting a phi whose values had been cached.
define void @fn2() {
define void @fn2(i1 %arg) {
entry:
%a = alloca i8, align 1
%0 = load ptr, ptr @c, align 1
@@ -58,7 +58,7 @@ entry:
for.cond: ; preds = %for.body, %entry
%d.0 = phi ptr [ %0, %entry ], [ null, %for.body ]
br i1 undef, label %for.body, label %for.cond.cleanup
br i1 %arg, label %for.body, label %for.cond.cleanup
for.body: ; preds = %for.cond
store volatile i8 undef, ptr %a, align 1

View File

@@ -3,12 +3,12 @@
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
define void @func_20() nounwind {
define void @func_20(i1 %arg) nounwind {
entry:
br label %for.cond
for.cond: ; preds = %for.cond2, %entry
br i1 undef, label %for.cond2, label %for.end22
br i1 %arg, label %for.cond2, label %for.end22
for.cond2: ; preds = %for.body5, %for.cond
br i1 false, label %for.body5, label %for.cond

View File

@@ -3,10 +3,10 @@
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define void @fn1(ptr %f) {
define void @fn1(ptr %f, i1 %arg) {
entry:
%tobool7 = icmp eq i32 undef, 0
br i1 undef, label %if.end.12, label %for.body.5
br i1 %arg, label %if.end.12, label %for.body.5
for.inc:
store i32 undef, ptr %f, align 4
@@ -19,7 +19,7 @@ for.inc.9: ; preds = %for.body.5
br i1 %tobool7, label %for.inc.9.1, label %for.inc
if.end.12: ; preds = %if.end.12, %for.body
br i1 undef, label %for.end.17, label %for.inc
br i1 %arg, label %for.end.17, label %for.inc
for.end.17: ; preds = %entry
ret void

View File

@@ -8,7 +8,7 @@ declare void @cold() cold
; Even though the likeliness of 'invoke' to throw an exception is assessed as low
; all other paths are even less likely. Check that hot paths leads to excepion handler.
define void @test1(i32 %0) personality ptr @"personality_function" !prof !1 {
define void @test1(i32 %0, i1 %arg) personality ptr @"personality_function" !prof !1 {
;CHECK: edge %entry -> %unreached probability is 0x00000001 / 0x80000000 = 0.00%
;CHECK: edge %entry -> %invoke probability is 0x7fffffff / 0x80000000 = 100.00% [HOT edge]
;CHECK: edge %invoke -> %invoke.cont.unreached probability is 0x00000000 / 0x80000000 = 0.00%
@@ -16,7 +16,7 @@ define void @test1(i32 %0) personality ptr @"personality_function" !prof !1 {
;CHECK: edge %land.pad -> %exit probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
entry:
br i1 undef, label %unreached, label %invoke, !prof !2
br i1 %arg, label %unreached, label %invoke, !prof !2
invoke:
invoke void @foo(i32 %0)
to label %invoke.cont.unreached unwind label %land.pad
@@ -38,7 +38,7 @@ exit:
ret void
}
define void @test2(i32 %0) personality ptr @"personality_function" {
define void @test2(i32 %0, i1 %arg) personality ptr @"personality_function" {
;CHECK: edge %entry -> %unreached probability is 0x00000000 / 0x80000000 = 0.00%
;CHECK: edge %entry -> %invoke probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
;CHECK: edge %invoke -> %invoke.cont.cold probability is 0x7fff8000 / 0x80000000 = 100.00% [HOT edge]
@@ -46,7 +46,7 @@ define void @test2(i32 %0) personality ptr @"personality_function" {
;CHECK: edge %land.pad -> %exit probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
entry:
br i1 undef, label %unreached, label %invoke
br i1 %arg, label %unreached, label %invoke
invoke:
invoke void @foo(i32 %0)
to label %invoke.cont.cold unwind label %land.pad
@@ -68,14 +68,14 @@ exit:
ret void
}
define void @test3(i32 %0) personality ptr @"personality_function" {
define void @test3(i32 %0, i1 %arg) personality ptr @"personality_function" {
;CHECK: edge %entry -> %unreached probability is 0x00000000 / 0x80000000 = 0.00%
;CHECK: edge %entry -> %invoke probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
;CHECK: edge %invoke -> %invoke.cont.cold probability is 0x7fff8000 / 0x80000000 = 100.00% [HOT edge]
;CHECK: edge %invoke -> %land.pad probability is 0x00008000 / 0x80000000 = 0.00%
;CHECK: edge %land.pad -> %exit probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
entry:
br i1 undef, label %unreached, label %invoke
br i1 %arg, label %unreached, label %invoke
invoke:
invoke void @foo(i32 %0)
to label %invoke.cont.cold unwind label %land.pad

View File

@@ -523,7 +523,7 @@ declare void @cold() cold
; If loop has single exit and it leads to 'cold' block then edge leading to loop enter
; should be considered 'cold' as well.
define void @test13() {
define void @test13(i1 %arg) {
; CHECK: edge %entry -> %loop probability is 0x078780e3 / 0x80000000 = 5.88%
; CHECK: edge %entry -> %exit probability is 0x78787f1d / 0x80000000 = 94.12% [HOT edge]
; CHECK: edge %loop -> %loop probability is 0x7fbe1203 / 0x80000000 = 99.80% [HOT edge]
@@ -531,12 +531,12 @@ define void @test13() {
; CHECK: edge %cold -> %exit probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
entry:
br i1 undef, label %loop, label %exit
br i1 %arg, label %loop, label %exit
loop:
%i.0 = phi i32 [ 0, %entry ], [ %inc, %loop ]
%inc = add nsw i32 %i.0, 1
br i1 undef, label %loop, label %cold
br i1 %arg, label %loop, label %cold
cold:
call void @cold()
@@ -547,7 +547,7 @@ exit:
}
; This is the same case as test13 but with additional loop 'preheader' block.
define void @test14() {
define void @test14(i1 %arg) {
; CHECK: edge %entry -> %preheader probability is 0x078780e3 / 0x80000000 = 5.88%
; CHECK: edge %entry -> %exit probability is 0x78787f1d / 0x80000000 = 94.12% [HOT edge]
; CHECK: edge %preheader -> %loop probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
@@ -556,7 +556,7 @@ define void @test14() {
; CHECK: edge %cold -> %exit probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
entry:
br i1 undef, label %preheader, label %exit
br i1 %arg, label %preheader, label %exit
preheader:
br label %loop
@@ -564,7 +564,7 @@ preheader:
loop:
%i.0 = phi i32 [ 0, %preheader ], [ %inc, %loop ]
%inc = add nsw i32 %i.0, 1
br i1 undef, label %loop, label %cold
br i1 %arg, label %loop, label %cold
cold:
call void @cold()
@@ -576,7 +576,7 @@ exit:
; If loop has multiple low probability exits then edge leading to loop enter
; should be considered low probable as well.
define void @test15() {
define void @test15(i1 %arg) {
; CHECK: edge %entry -> %loop probability is 0x078780e3 / 0x80000000 = 5.88%
; CHECK: edge %entry -> %exit probability is 0x78787f1d / 0x80000000 = 94.12% [HOT edge]
; CHECK: edge %loop -> %cont probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
@@ -586,15 +586,15 @@ define void @test15() {
; CHECK: edge %cold -> %exit probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
entry:
br i1 undef, label %loop, label %exit
br i1 %arg, label %loop, label %exit
loop:
%i.0 = phi i32 [ 0, %entry ], [ %inc, %cont ]
%inc = add nsw i32 %i.0, 1
br i1 undef, label %cont, label %unreached
br i1 %arg, label %cont, label %unreached
cont:
br i1 undef, label %loop, label %cold
br i1 %arg, label %loop, label %cold
unreached:
unreachable
@@ -609,7 +609,7 @@ exit:
}
; This is the same case as test15 but with additional loop 'preheader' block.
define void @test16() {
define void @test16(i1 %arg) {
; CHECK: edge %entry -> %preheader probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
; CHECK: edge %preheader -> %loop probability is 0x078780e3 / 0x80000000 = 5.88%
; CHECK: edge %preheader -> %exit probability is 0x78787f1d / 0x80000000 = 94.12% [HOT edge]
@@ -623,15 +623,15 @@ entry:
br label %preheader
preheader:
br i1 undef, label %loop, label %exit
br i1 %arg, label %loop, label %exit
loop:
%i.0 = phi i32 [ 0, %preheader ], [ %inc, %cont ]
%inc = add nsw i32 %i.0, 1
br i1 undef, label %cont, label %unreached
br i1 %arg, label %cont, label %unreached
cont:
br i1 undef, label %loop, label %cold
br i1 %arg, label %loop, label %cold
unreached:
unreachable
@@ -649,7 +649,7 @@ declare void @abort() noreturn
; Check that 'preheader' has 50/50 probability since there is one 'normal' exit.
; Check that exit to 'cold' and 'noreturn' has lower probability than 'normal' exit.
define void @test17() {
define void @test17(i1 %arg) {
; CHECK: edge %entry -> %preheader probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
; CHECK: edge %preheader -> %loop probability is 0x40000000 / 0x80000000 = 50.00%
; CHECK: edge %preheader -> %exit probability is 0x40000000 / 0x80000000 = 50.00%
@@ -664,18 +664,18 @@ entry:
br label %preheader
preheader:
br i1 undef, label %loop, label %exit
br i1 %arg, label %loop, label %exit
loop:
%i.0 = phi i32 [ 0, %preheader ], [ %inc, %cont2 ]
%inc = add nsw i32 %i.0, 1
br i1 undef, label %cont, label %noreturn
br i1 %arg, label %cont, label %noreturn
cont:
br i1 undef, label %cont2, label %cold
br i1 %arg, label %cont2, label %cold
cont2:
br i1 undef, label %loop, label %exit
br i1 %arg, label %loop, label %exit
noreturn:
call void @abort()
@@ -692,7 +692,7 @@ exit:
; This is case with two loops where one nested into another. Nested loop has
; low probable exit what encreases robability to take exit in the top level loop.
define void @test18() {
define void @test18(i1 %arg) {
; CHECK: edge %entry -> %top.loop probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
; CHECK: edge %top.loop -> %loop probability is 0x546cd4b7 / 0x80000000 = 65.96%
; CHECK: edge %top.loop -> %exit probability is 0x2b932b49 / 0x80000000 = 34.04%
@@ -705,12 +705,12 @@ entry:
top.loop:
%j.0 = phi i32 [ 0, %entry ], [ %j.inc, %cold ]
br i1 undef, label %loop, label %exit
br i1 %arg, label %loop, label %exit
loop:
%i.0 = phi i32 [ %j.0, %top.loop ], [ %inc, %loop ]
%inc = add nsw i32 %i.0, 1
br i1 undef, label %loop, label %cold
br i1 %arg, label %loop, label %cold
cold:
call void @cold()

View File

@@ -5,7 +5,7 @@ declare void @bar() cold
; Both 'l1' and 'r1' has one edge leading to 'cold' and another one to
; 'unreachable' blocks. Check that 'cold' paths are preferred. Also ensure both
; paths from 'entry' block are equal.
define void @test1(i32 %0) {
define void @test1(i32 %0, i1 %arg) {
;CHECK: edge %entry -> %l1 probability is 0x40000000 / 0x80000000 = 50.00%
;CHECK: edge %entry -> %r1 probability is 0x40000000 / 0x80000000 = 50.00%
;CHECK: edge %l1 -> %cold probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
@@ -14,13 +14,13 @@ define void @test1(i32 %0) {
;CHECK: edge %r1 -> %cold probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
entry:
br i1 undef, label %l1, label %r1
br i1 %arg, label %l1, label %r1
l1:
br i1 undef, label %cold, label %unreached
br i1 %arg, label %cold, label %unreached
r1:
br i1 undef, label %unreached, label %cold
br i1 %arg, label %unreached, label %cold
unreached:
unreachable
@@ -33,7 +33,7 @@ cold:
; Both edges of 'l1' leads to 'cold' blocks while one edge of 'r1' leads to
; 'unreachable' block. Check that 'l1' has 50/50 while 'r1' has 0/100
; distributuion. Also ensure both paths from 'entry' block are equal.
define void @test2(i32 %0) {
define void @test2(i32 %0, i1 %arg) {
;CHECK: edge %entry -> %l1 probability is 0x40000000 / 0x80000000 = 50.00%
;CHECK: edge %entry -> %r1 probability is 0x40000000 / 0x80000000 = 50.00%
;CHECK: edge %l1 -> %cold probability is 0x40000000 / 0x80000000 = 50.00%
@@ -42,13 +42,13 @@ define void @test2(i32 %0) {
;CHECK: edge %r1 -> %cold probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
entry:
br i1 undef, label %l1, label %r1
br i1 %arg, label %l1, label %r1
l1:
br i1 undef, label %cold, label %cold2
br i1 %arg, label %cold, label %cold2
r1:
br i1 undef, label %unreached, label %cold
br i1 %arg, label %unreached, label %cold
unreached:
unreachable
@@ -64,7 +64,7 @@ cold2:
; Both edges of 'r1' leads to 'unreachable' blocks while one edge of 'l1' leads to
; 'cold' block. Ensure that path leading to 'cold' block is preferred.
define void @test3(i32 %0) {
define void @test3(i32 %0, i1 %arg) {
;CHECK: edge %entry -> %l1 probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
;CHECK: edge %entry -> %r1 probability is 0x00000000 / 0x80000000 = 0.00%
;CHECK: edge %l1 -> %cold probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
@@ -73,13 +73,13 @@ define void @test3(i32 %0) {
;CHECK: edge %r1 -> %unreached2 probability is 0x40000000 / 0x80000000 = 50.00%
entry:
br i1 undef, label %l1, label %r1
br i1 %arg, label %l1, label %r1
l1:
br i1 undef, label %cold, label %unreached
br i1 %arg, label %cold, label %unreached
r1:
br i1 undef, label %unreached, label %unreached2
br i1 %arg, label %unreached, label %unreached2
unreached:
unreachable
@@ -95,7 +95,7 @@ cold:
; Left edge of 'entry' leads to 'cold' block while right edge is 'normal' continuation.
; Check that we able to propagate 'cold' weight to 'entry' block. Also ensure
; both edges from 'l1' are equally likely.
define void @test4(i32 %0) {
define void @test4(i32 %0, i1 %arg) {
;CHECK: edge %entry -> %l1 probability is 0x078780e3 / 0x80000000 = 5.88%
;CHECK: edge %entry -> %r1 probability is 0x78787f1d / 0x80000000 = 94.12% [HOT edge]
;CHECK: edge %l1 -> %l2 probability is 0x40000000 / 0x80000000 = 50.00%
@@ -105,10 +105,10 @@ define void @test4(i32 %0) {
;CHECK: edge %to.cold -> %cold probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
entry:
br i1 undef, label %l1, label %r1
br i1 %arg, label %l1, label %r1
l1:
br i1 undef, label %l2, label %r2
br i1 %arg, label %l2, label %r2
l2:
br label %to.cold
@@ -128,7 +128,7 @@ cold:
}
; Check that most likely path from 'entry' to 'l2' through 'r1' is preferred.
define void @test5(i32 %0) {
define void @test5(i32 %0, i1 %arg) {
;CHECK: edge %entry -> %cold probability is 0x078780e3 / 0x80000000 = 5.88%
;CHECK: edge %entry -> %r1 probability is 0x78787f1d / 0x80000000 = 94.12% [HOT edge]
;CHECK: edge %cold -> %l2 probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge]
@@ -136,14 +136,14 @@ define void @test5(i32 %0) {
;CHECK: edge %r1 -> %unreached probability is 0x00000000 / 0x80000000 = 0.00%
entry:
br i1 undef, label %cold, label %r1
br i1 %arg, label %cold, label %r1
cold:
call void @bar()
br label %l2
r1:
br i1 undef, label %l2, label %unreached
br i1 %arg, label %l2, label %unreached
l2:
ret void

View File

@@ -26,12 +26,12 @@
declare void @llvm.lifetime.end(i64, ptr nocapture) #0
; Function Attrs: nounwind ssp uwtable
define hidden void @fun(ptr %N) #1 align 2 {
define hidden void @fun(ptr %N, i1 %arg) #1 align 2 {
; CHECK: define
entry:
%NumOperands.i = getelementptr inbounds %"class.llvm::SDNode.310.1762.9990.10474.10958.11442.11926.12410.12894.13378.13862.15314.15798.16282.17734.19186.21122.25962.26930.29350.29834.30318.30802.31286.31770.32254.32738.33706.36610.38062.41642", ptr %N, i64 0, i32 8
%0 = load i16, ptr %NumOperands.i, align 8, !tbaa !1
br i1 undef, label %for.cond.cleanup, label %for.body.lr.ph
br i1 %arg, label %for.cond.cleanup, label %for.body.lr.ph
for.body.lr.ph: ; preds = %entry
%wide.trip.count192 = zext i16 %0 to i64

View File

@@ -7,36 +7,36 @@ define void @empty() {
ret void
}
define void @simple() {
define void @simple(i1 %arg) {
; CHECK-LABEL: CycleInfo for function: simple
; CHECK: depth=1: entries(loop)
entry:
br label %loop
loop:
br i1 undef, label %loop, label %exit
br i1 %arg, label %loop, label %exit
exit:
ret void
}
define void @two_latches() {
define void @two_latches(i1 %arg) {
; CHECK-LABEL: CycleInfo for function: two_latches
; CHECK: depth=1: entries(loop) loop_next
entry:
br label %loop
loop:
br i1 undef, label %loop, label %loop_next
br i1 %arg, label %loop, label %loop_next
loop_next:
br i1 undef, label %exit, label %loop
br i1 %arg, label %exit, label %loop
exit:
ret void
}
define void @nested_simple() {
define void @nested_simple(i1 %arg) {
; CHECK-LABEL: CycleInfo for function: nested_simple
; CHECK: depth=1: entries(outer_header) outer_latch inner
; CHECK: depth=2: entries(inner)
@@ -47,16 +47,16 @@ outer_header:
br label %inner
inner:
br i1 undef, label %inner, label %outer_latch
br i1 %arg, label %inner, label %outer_latch
outer_latch:
br i1 undef, label %outer_header, label %exit
br i1 %arg, label %outer_header, label %exit
exit:
ret void
}
define void @nested_outer_latch_in_inner_loop() {
define void @nested_outer_latch_in_inner_loop(i1 %arg) {
; CHECK-LABEL: CycleInfo for function: nested_outer_latch_in_inner_loop
; CHECK: depth=1: entries(outer_header) inner_header inner_latch
; CHECK: depth=2: entries(inner_header) inner_latch
@@ -67,33 +67,33 @@ outer_header:
br label %inner_header
inner_header:
br i1 undef, label %inner_latch, label %outer_header
br i1 %arg, label %inner_latch, label %outer_header
inner_latch:
br i1 undef, label %exit, label %inner_header
br i1 %arg, label %exit, label %inner_header
exit:
ret void
}
define void @sibling_loops() {
define void @sibling_loops(i1 %arg) {
; CHECK-LABEL: CycleInfo for function: sibling_loops
; CHECK-DAG: depth=1: entries(left)
; CHECK-DAG: depth=1: entries(right)
entry:
br i1 undef, label %left, label %right
br i1 %arg, label %left, label %right
left:
br i1 undef, label %left, label %exit
br i1 %arg, label %left, label %exit
right:
br i1 undef, label %right, label %exit
br i1 %arg, label %right, label %exit
exit:
ret void
}
define void @serial_loops() {
define void @serial_loops(i1 %arg) {
; CHECK-LABEL: CycleInfo for function: serial_loops
; CHECK-DAG: depth=1: entries(second)
; CHECK-DAG: depth=1: entries(first)
@@ -101,16 +101,16 @@ entry:
br label %first
first:
br i1 undef, label %first, label %second
br i1 %arg, label %first, label %second
second:
br i1 undef, label %second, label %exit
br i1 %arg, label %second, label %exit
exit:
ret void
}
define void @nested_sibling_loops() {
define void @nested_sibling_loops(i1 %arg) {
; CHECK-LABEL: CycleInfo for function: nested_sibling_loops
; CHECK: depth=1: entries(outer_header) left right
; CHECK-DAG: depth=2: entries(right)
@@ -119,7 +119,7 @@ entry:
br label %outer_header
outer_header:
br i1 undef, label %left, label %right
br i1 %arg, label %left, label %right
left:
switch i32 undef, label %exit [ i32 0, label %left
@@ -133,7 +133,7 @@ exit:
ret void
}
define void @deeper_nest() {
define void @deeper_nest(i1 %arg) {
; CHECK-LABEL: CycleInfo for function: deeper_nest
; CHECK: depth=1: entries(outer_header) outer_latch middle_header inner_header inner_latch
; CHECK: depth=2: entries(middle_header) inner_header inner_latch
@@ -148,47 +148,47 @@ middle_header:
br label %inner_header
inner_header:
br i1 undef, label %middle_header, label %inner_latch
br i1 %arg, label %middle_header, label %inner_latch
inner_latch:
br i1 undef, label %inner_header, label %outer_latch
br i1 %arg, label %inner_header, label %outer_latch
outer_latch:
br i1 undef, label %outer_header, label %exit
br i1 %arg, label %outer_header, label %exit
exit:
ret void
}
define void @irreducible_basic() {
define void @irreducible_basic(i1 %arg) {
; CHECK-LABEL: CycleInfo for function: irreducible_basic
; CHECK: depth=1: entries(right left)
entry:
br i1 undef, label %left, label %right
br i1 %arg, label %left, label %right
left:
br i1 undef, label %right, label %exit
br i1 %arg, label %right, label %exit
right:
br i1 undef, label %left, label %exit
br i1 %arg, label %left, label %exit
exit:
ret void
}
define void @irreducible_mess() {
define void @irreducible_mess(i1 %arg) {
; CHECK-LABEL: CycleInfo for function: irreducible_mess
; CHECK: depth=1: entries(B A) D C
; CHECK: depth=2: entries(D C A)
; CHECK: depth=3: entries(C A)
entry:
br i1 undef, label %A, label %B
br i1 %arg, label %A, label %B
A:
br i1 undef, label %C, label %D
br i1 %arg, label %C, label %D
B:
br i1 undef, label %C, label %D
br i1 %arg, label %C, label %D
C:
switch i32 undef, label %A [ i32 0, label %D
@@ -202,7 +202,7 @@ exit:
ret void
}
define void @irreducible_into_simple_cycle() {
define void @irreducible_into_simple_cycle(i1 %arg) {
; CHECK-LABEL: CycleInfo for function: irreducible_into_simple_cycle
; CHECK: depth=1: entries(F C A) E D B
entry:
@@ -219,28 +219,28 @@ C:
br label %D
D:
br i1 undef, label %E, label %exit
br i1 %arg, label %E, label %exit
E:
br label %F
F:
br i1 undef, label %A, label %exit
br i1 %arg, label %A, label %exit
exit:
ret void
}
define void @irreducible_mountain_bug() {
define void @irreducible_mountain_bug(i1 %arg) {
; CHECK-LABEL: CycleInfo for function: irreducible_mountain_bug
; CHECK: depth=1: entries(while.cond)
; CHECK: depth=2: entries(cond.end61 cond.true49) while.body63 while.cond47
; CHECK: depth=3: entries(while.body63 cond.true49) while.cond47
entry:
br i1 undef, label %if.end, label %if.then
br i1 %arg, label %if.end, label %if.then
if.end:
br i1 undef, label %if.then7, label %if.else
br i1 %arg, label %if.then7, label %if.else
if.then7:
br label %if.end16
@@ -249,49 +249,49 @@ if.else:
br label %if.end16
if.end16:
br i1 undef, label %while.cond.preheader, label %if.then39
br i1 %arg, label %while.cond.preheader, label %if.then39
while.cond.preheader:
br label %while.cond
while.cond:
br i1 undef, label %cond.true49, label %lor.rhs
br i1 %arg, label %cond.true49, label %lor.rhs
cond.true49:
br i1 undef, label %if.then69, label %while.body63
br i1 %arg, label %if.then69, label %while.body63
while.body63:
br i1 undef, label %exit, label %while.cond47
br i1 %arg, label %exit, label %while.cond47
while.cond47:
br i1 undef, label %cond.true49, label %cond.end61
br i1 %arg, label %cond.true49, label %cond.end61
cond.end61:
br i1 undef, label %while.body63, label %while.cond
br i1 %arg, label %while.body63, label %while.cond
if.then69:
br i1 undef, label %exit, label %while.cond
br i1 %arg, label %exit, label %while.cond
lor.rhs:
br i1 undef, label %cond.end61, label %while.end76
br i1 %arg, label %cond.end61, label %while.end76
while.end76:
br label %exit
if.then39:
br i1 undef, label %exit, label %if.end.i145
br i1 %arg, label %exit, label %if.end.i145
if.end.i145:
br i1 undef, label %exit, label %if.end8.i149
br i1 %arg, label %exit, label %if.end8.i149
if.end8.i149:
br label %exit
if.then:
br i1 undef, label %exit, label %if.end.i
br i1 %arg, label %exit, label %if.end.i
if.end.i:
br i1 undef, label %exit, label %if.end8.i
br i1 %arg, label %exit, label %if.end8.i
if.end8.i:
br label %exit

View File

@@ -1,7 +1,7 @@
; RUN: opt < %s -disable-output -passes='verify<cycles>,print<cycles>' 2>&1 | FileCheck %s
; CHECK-LABEL: CycleInfo for function: unreachable
; CHECK: depth=1: entries(loop.body) loop.latch inner.block
define void @unreachable(i32 %n) {
define void @unreachable(i32 %n, i1 %arg) {
entry:
br label %loop.body
@@ -13,7 +13,7 @@ unreachable.block:
br label %inner.block
inner.block:
br i1 undef, label %loop.exit, label %loop.latch
br i1 %arg, label %loop.exit, label %loop.latch
loop.latch:
br label %loop.body

View File

@@ -8,7 +8,7 @@
target datalayout = "e-m:e-p:32:32-i64:64-a:0-v32:32-n16:32"
define fastcc void @test() {
define fastcc void @test(i1 %arg) {
entry:
%0 = load i16, ptr undef, align 2
%conv21 = zext i16 %0 to i32
@@ -21,7 +21,7 @@ for.cond7.preheader:
for.body11:
%arrayidx.phi = phi ptr [ %p1.022, %for.cond7.preheader ], [ undef, %for.body11 ]
store i8 undef, ptr %arrayidx.phi, align 1
br i1 undef, label %for.body11, label %for.end
br i1 %arg, label %for.body11, label %for.end
for.end:
%add.ptr = getelementptr inbounds i8, ptr %p1.022, i32 %conv21

View File

@@ -2,17 +2,17 @@
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define void @foo(ptr %Ey) {
define void @foo(ptr %Ey, i1 %arg) {
entry:
br i1 undef, label %for.cond55.preheader, label %for.end324
br i1 %arg, label %for.cond55.preheader, label %for.end324
for.cond55.preheader:
%iz.069 = phi i64 [ %inc323, %for.inc322 ], [ 0, %entry ]
br i1 undef, label %for.cond58.preheader, label %for.inc322
br i1 %arg, label %for.cond58.preheader, label %for.inc322
for.cond58.preheader:
%iy.067 = phi i64 [ %inc320, %for.end ], [ 0, %for.cond55.preheader ]
br i1 undef, label %for.body60, label %for.end
br i1 %arg, label %for.body60, label %for.end
for.body60:
%ix.062 = phi i64 [ %inc, %for.body60 ], [ 0, %for.cond58.preheader ]
@@ -27,11 +27,11 @@ for.body60:
for.end:
%inc320 = add nsw i64 %iy.067, 1
br i1 undef, label %for.cond58.preheader, label %for.inc322
br i1 %arg, label %for.cond58.preheader, label %for.inc322
for.inc322:
%inc323 = add nsw i64 %iz.069, 1
br i1 undef, label %for.cond55.preheader, label %for.end324
br i1 %arg, label %for.cond55.preheader, label %for.end324
for.end324:
ret void

View File

@@ -29,21 +29,21 @@ target datalayout = "e-m:e-p:32:32-i1:32-i64:64-a:0-v32:32-n16:32"
%20 = type { [768 x i32] }
%21 = type { [416 x i32] }
define void @test(ptr %A) #0 align 2 {
define void @test(ptr %A, i1 %arg) #0 align 2 {
entry:
%v1 = load i32, ptr undef, align 4
br label %bb13
bb13:
%v2 = phi i32 [ undef, %entry ], [ %v39, %bb38 ]
br i1 undef, label %bb15, label %bb38
br i1 %arg, label %bb15, label %bb38
bb15:
%v3 = mul nsw i32 %v2, undef
br label %bb17
bb17:
br i1 undef, label %bb21, label %bb37
br i1 %arg, label %bb21, label %bb37
bb21:
%v22 = add nsw i32 undef, 1
@@ -55,10 +55,10 @@ bb21:
%v29 = mul nsw i32 %v28, 32
%v30 = getelementptr inbounds %1, ptr %A, i32 0, i32 7, i32 14, i32 %v29
%v32 = load <32 x i32>, ptr %v30, align 128
br i1 undef, label %bb21, label %bb37
br i1 %arg, label %bb21, label %bb37
bb37:
br i1 undef, label %bb17, label %bb38
br i1 %arg, label %bb17, label %bb38
bb38:
%v39 = add nsw i32 %v2, 1

View File

@@ -7,7 +7,7 @@
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n8:16:32-S64"
target triple = "thumbv7--linux-gnueabi"
define void @f(ptr %a, i32 %n) align 2 {
define void @f(ptr %a, i32 %n, i1 %arg) align 2 {
for.preheader:
%t.0 = ashr exact i32 %n, 3
br label %for.body.1
@@ -15,7 +15,7 @@ for.preheader:
for.body.1:
%i.1 = phi i32 [ %t.5, %for.inc ], [ 0, %for.preheader ]
%i.2 = phi i32 [ %i.5, %for.inc ], [ %t.0, %for.preheader ]
br i1 undef, label %for.inc, label %for.body.2
br i1 %arg, label %for.inc, label %for.body.2
for.body.2:
%i.3 = phi i32 [ %t.1, %for.body.2 ], [ %i.1, %for.body.1 ]
@@ -23,13 +23,13 @@ for.body.2:
%t.2 = load ptr, ptr %a, align 4
%t.3 = getelementptr inbounds i32, ptr %t.2, i32 %i.3
%t.4 = load i32, ptr %t.3, align 4
br i1 undef, label %for.inc, label %for.body.2
br i1 %arg, label %for.inc, label %for.body.2
for.inc:
%i.4 = phi i32 [ %i.2, %for.body.1 ], [ %i.2, %for.body.2 ]
%t.5 = add i32 %i.1, %i.4
%i.5 = add i32 %i.2, -1
br i1 undef, label %for.exit, label %for.body.1
br i1 %arg, label %for.exit, label %for.body.1
for.exit:
ret void

View File

@@ -1,6 +1,6 @@
; RUN: opt < %s -disable-output -passes='print<domtree>' 2>&1 | FileCheck %s
define void @test1() {
define void @test1(i1 %arg) {
; CHECK-LABEL: DominatorTree for function: test1
; CHECK: [1] %entry
; CHECK-NEXT: [2] %a
@@ -10,7 +10,7 @@ define void @test1() {
; CHECK-NEXT: [2] %b
entry:
br i1 undef, label %a, label %b
br i1 %arg, label %a, label %b
a:
br label %c
@@ -19,7 +19,7 @@ b:
br label %c
c:
br i1 undef, label %d, label %e
br i1 %arg, label %d, label %e
d:
ret void
@@ -28,7 +28,7 @@ e:
ret void
}
define void @test2() {
define void @test2(i1 %arg) {
; CHECK-LABEL: DominatorTree for function: test2
; CHECK: [1] %entry
; CHECK-NEXT: [2] %a
@@ -44,13 +44,13 @@ a:
br label %b
b:
br i1 undef, label %a, label %c
br i1 %arg, label %a, label %c
c:
br i1 undef, label %d, label %ret
br i1 %arg, label %d, label %ret
d:
br i1 undef, label %a, label %ret
br i1 %arg, label %a, label %ret
ret:
ret void

View File

@@ -5,7 +5,7 @@
; RUN: FileCheck %s -input-file=dom.test1.dot -check-prefix=TEST1
; RUN: FileCheck %s -input-file=dom.test2.dot -check-prefix=TEST2
define void @test1() {
define void @test1(i1 %arg) {
; TEST1: digraph "Dominator tree for 'test1' function"
; TEST1-NEXT: label="Dominator tree for 'test1' function"
; TEST1: Node0x[[EntryID:.*]] [shape=record,label="{entry:
@@ -21,7 +21,7 @@ define void @test1() {
; TEST1-NEXT: Node0x[[B_ID]] [shape=record,label="{b:
entry:
br i1 undef, label %a, label %b
br i1 %arg, label %a, label %b
a:
br label %c
@@ -30,7 +30,7 @@ b:
br label %c
c:
br i1 undef, label %d, label %e
br i1 %arg, label %d, label %e
d:
ret void
@@ -39,7 +39,7 @@ e:
ret void
}
define void @test2() {
define void @test2(i1 %arg) {
; TEST2: digraph "Dominator tree for 'test2' function"
; TEST2-NEXT: label="Dominator tree for 'test2' function"
; TEST2: Node0x[[EntryID:.*]] [shape=record,label="{entry:
@@ -61,13 +61,13 @@ a:
br label %b
b:
br i1 undef, label %a, label %c
br i1 %arg, label %a, label %c
c:
br i1 undef, label %d, label %e
br i1 %arg, label %d, label %e
d:
br i1 undef, label %a, label %e
br i1 %arg, label %a, label %e
e:
ret void

View File

@@ -17,35 +17,37 @@ target triple = "x86_64-grtev4-linux-gnu"
%4 = type { ptr }
%5 = type { i64, [8 x i8] }
define void @fail(ptr noalias sret(i1) %arg, ptr %arg1, ptr %arg2, ptr %arg3) local_unnamed_addr #0 {
define void @fail(ptr noalias sret(i1) %arg, ptr %arg1, ptr %arg2, ptr %arg3, i1 %arg4) local_unnamed_addr #0 {
; CHECK-LABEL: @fail(
; CHECK-NEXT: bb:
; CHECK-NEXT: [[I4:%.*]] = load ptr, ptr [[ARG1:%.*]], align 8, !invariant.group !6
; CHECK-NEXT: [[I4:%.*]] = load ptr, ptr [[ARG1:%.*]], align 8, !invariant.group [[META6:![0-9]+]]
; CHECK-NEXT: [[I5:%.*]] = getelementptr inbounds ptr, ptr [[I4]], i64 6
; CHECK-NEXT: [[I6:%.*]] = load ptr, ptr [[I5]], align 8, !invariant.load !6
; CHECK-NEXT: [[I6:%.*]] = load ptr, ptr [[I5]], align 8, !invariant.load [[META6]]
; CHECK-NEXT: [[I7:%.*]] = tail call i64 [[I6]](ptr [[ARG1]]) #[[ATTR1:[0-9]+]]
; CHECK-NEXT: [[I9:%.*]] = load ptr, ptr [[ARG2:%.*]], align 8
; CHECK-NEXT: store i8 0, ptr [[I9]], align 1
; CHECK-NEXT: br i1 undef, label [[BB10:%.*]], label [[BB29:%.*]]
; CHECK-NEXT: br i1 [[ARG4:%.*]], label [[BB10:%.*]], label [[BB29:%.*]]
; CHECK: bb10:
; CHECK-NEXT: [[I14_PHI_TRANS_INSERT:%.*]] = getelementptr inbounds ptr, ptr [[I4]], i64 22
; CHECK-NEXT: [[I15_PRE:%.*]] = load ptr, ptr [[I14_PHI_TRANS_INSERT]], align 8, !invariant.load !6
; CHECK-NEXT: [[I15_PRE:%.*]] = load ptr, ptr [[I14_PHI_TRANS_INSERT]], align 8, !invariant.load [[META6]]
; CHECK-NEXT: br label [[BB12:%.*]]
; CHECK: bb12:
; CHECK-NEXT: [[I16:%.*]] = call i64 [[I15_PRE]](ptr nonnull [[ARG1]], ptr null, i64 0) #[[ATTR1]]
; CHECK-NEXT: br i1 undef, label [[BB28:%.*]], label [[BB17:%.*]]
; CHECK-NEXT: br i1 true, label [[BB28:%.*]], label [[BB17:%.*]]
; CHECK: bb17:
; CHECK-NEXT: br i1 undef, label [[BB18:%.*]], label [[BB21:%.*]]
; CHECK-NEXT: br i1 true, label [[BB18:%.*]], label [[BB21:%.*]]
; CHECK: bb18:
; CHECK-NEXT: br label [[BB28]]
; CHECK: bb21:
; CHECK-NEXT: br i1 undef, label [[BB25:%.*]], label [[BB26:%.*]]
; CHECK-NEXT: br i1 true, label [[BB25:%.*]], label [[BB26:%.*]]
; CHECK: bb25:
; CHECK-NEXT: br label [[BB28]]
; CHECK: bb26:
; CHECK-NEXT: br label [[BB28]]
; CHECK: bb28:
; CHECK-NEXT: br i1 undef, label [[BB12]], label [[BB29]]
; CHECK-NEXT: br i1 true, label [[BB12]], label [[BB28_BB29_CRIT_EDGE:%.*]]
; CHECK: bb28.bb29_crit_edge:
; CHECK-NEXT: br label [[BB29]]
; CHECK: bb29:
; CHECK-NEXT: ret void
;
@@ -56,7 +58,7 @@ bb:
%i7 = tail call i64 %i6(ptr %arg1) #1
%i9 = load ptr, ptr %arg2, align 8
store i8 0, ptr %i9, align 1
br i1 undef, label %bb10, label %bb29
br i1 %arg4, label %bb10, label %bb29
bb10: ; preds = %bb
br label %bb12
@@ -66,10 +68,10 @@ bb12: ; preds = %bb28, %bb10
%i14 = getelementptr inbounds ptr, ptr %i13, i64 22
%i15 = load ptr, ptr %i14, align 8, !invariant.load !6
%i16 = call i64 %i15(ptr nonnull %arg1, ptr null, i64 0) #1
br i1 undef, label %bb28, label %bb17
br i1 %arg4, label %bb28, label %bb17
bb17: ; preds = %bb12
br i1 undef, label %bb18, label %bb21
br i1 %arg4, label %bb18, label %bb21
bb18: ; preds = %bb17
br label %bb19
@@ -90,7 +92,7 @@ bb23: ; preds = %bb22
br label %bb24
bb24: ; preds = %bb23
br i1 undef, label %bb25, label %bb26
br i1 %arg4, label %bb25, label %bb26
bb25: ; preds = %bb24
br label %bb28
@@ -102,7 +104,7 @@ bb27: ; preds = %bb26
br label %bb28
bb28: ; preds = %bb27, %bb25, %bb20, %bb12
br i1 undef, label %bb12, label %bb29
br i1 %arg4, label %bb12, label %bb29
bb29: ; preds = %bb28, %bb
ret void

View File

@@ -3,15 +3,15 @@
%struct.hoge = type { i32, %struct.widget }
%struct.widget = type { i64 }
define hidden void @quux(ptr %f) align 2 {
define hidden void @quux(ptr %f, i1 %arg) align 2 {
%tmp = getelementptr inbounds %struct.hoge, ptr %f, i64 0, i32 1, i32 0
%tmp24 = getelementptr inbounds %struct.hoge, ptr %f, i64 0, i32 1
br label %bb26
bb26: ; preds = %bb77, %0
; CHECK: 3 = MemoryPhi({%0,liveOnEntry},{bb77,2})
; CHECK-NEXT: br i1 undef, label %bb68, label %bb77
br i1 undef, label %bb68, label %bb77
; CHECK-NEXT: br i1 %arg, label %bb68, label %bb77
br i1 %arg, label %bb68, label %bb77
bb68: ; preds = %bb26
; CHECK: MemoryUse(liveOnEntry)
@@ -31,7 +31,7 @@ bb77: ; preds = %bb68, %bb26
br label %bb26
}
define hidden void @quux_no_null_opt(ptr %f) align 2 #0 {
define hidden void @quux_no_null_opt(ptr %f, i1 %arg) align 2 #0 {
; CHECK-LABEL: quux_no_null_opt(
%tmp = getelementptr inbounds %struct.hoge, ptr %f, i64 0, i32 1, i32 0
%tmp24 = getelementptr inbounds %struct.hoge, ptr %f, i64 0, i32 1
@@ -39,8 +39,8 @@ define hidden void @quux_no_null_opt(ptr %f) align 2 #0 {
bb26: ; preds = %bb77, %0
; CHECK: 3 = MemoryPhi({%0,liveOnEntry},{bb77,2})
; CHECK-NEXT: br i1 undef, label %bb68, label %bb77
br i1 undef, label %bb68, label %bb77
; CHECK-NEXT: br i1 %arg, label %bb68, label %bb77
br i1 %arg, label %bb68, label %bb77
bb68: ; preds = %bb26
; CHECK: MemoryUse(3)
@@ -61,15 +61,15 @@ bb77: ; preds = %bb68, %bb26
}
; CHECK-LABEL: define void @quux_skip
define void @quux_skip(ptr noalias %f, ptr noalias %g) align 2 {
define void @quux_skip(ptr noalias %f, ptr noalias %g, i1 %arg) align 2 {
%tmp = getelementptr inbounds %struct.hoge, ptr %f, i64 0, i32 1, i32 0
%tmp24 = getelementptr inbounds %struct.hoge, ptr %f, i64 0, i32 1
br label %bb26
bb26: ; preds = %bb77, %0
; CHECK: 3 = MemoryPhi({%0,liveOnEntry},{bb77,2})
; CHECK-NEXT: br i1 undef, label %bb68, label %bb77
br i1 undef, label %bb68, label %bb77
; CHECK-NEXT: br i1 %arg, label %bb68, label %bb77
br i1 %arg, label %bb68, label %bb77
bb68: ; preds = %bb26
; CHECK: MemoryUse(3)
@@ -89,7 +89,7 @@ bb77: ; preds = %bb68, %bb26
}
; CHECK-LABEL: define void @quux_dominated
define void @quux_dominated(ptr noalias %f, ptr noalias %g) align 2 {
define void @quux_dominated(ptr noalias %f, ptr noalias %g, i1 %arg) align 2 {
%tmp = getelementptr inbounds %struct.hoge, ptr %f, i64 0, i32 1, i32 0
%tmp24 = getelementptr inbounds %struct.hoge, ptr %f, i64 0, i32 1
br label %bb26
@@ -99,7 +99,7 @@ bb26: ; preds = %bb77, %0
; CHECK: MemoryUse(3)
; CHECK-NEXT: load ptr, ptr %tmp24, align 8
load ptr, ptr %tmp24, align 8
br i1 undef, label %bb68, label %bb77
br i1 %arg, label %bb68, label %bb77
bb68: ; preds = %bb26
; CHECK: MemoryUse(3)
@@ -119,7 +119,7 @@ bb77: ; preds = %bb68, %bb26
}
; CHECK-LABEL: define void @quux_nodominate
define void @quux_nodominate(ptr noalias %f, ptr noalias %g) align 2 {
define void @quux_nodominate(ptr noalias %f, ptr noalias %g, i1 %arg) align 2 {
%tmp = getelementptr inbounds %struct.hoge, ptr %f, i64 0, i32 1, i32 0
%tmp24 = getelementptr inbounds %struct.hoge, ptr %f, i64 0, i32 1
br label %bb26
@@ -129,7 +129,7 @@ bb26: ; preds = %bb77, %0
; CHECK: MemoryUse(liveOnEntry)
; CHECK-NEXT: load ptr, ptr %tmp24, align 8
load ptr, ptr %tmp24, align 8
br i1 undef, label %bb68, label %bb77
br i1 %arg, label %bb68, label %bb77
bb68: ; preds = %bb26
; CHECK: MemoryUse(3)

View File

@@ -2,14 +2,14 @@
; REQUIRES: asserts
; CHECK-LABEL: @f_w4_i2
define void @f_w4_i2() {
define void @f_w4_i2(i1 %arg) {
entry:
br label %for.cond
for.cond: ; preds = %for.body, %entry
%i.0 = phi i16 [ 0, %entry ], [ %inc, %for.body ]
call void @llvm.dbg.value(metadata i16 %i.0, metadata !32, metadata !DIExpression()), !dbg !31
br i1 undef, label %for.body, label %for.cond.cleanup
br i1 %arg, label %for.body, label %for.cond.cleanup
for.cond.cleanup: ; preds = %for.cond
ret void

View File

@@ -8,7 +8,7 @@ target triple = "x86_64-unknown-linux-gnu"
; CHECK-LABEL: @overflow_iter_var
; CHECK-NOT: MemoryDef
define void @overflow_iter_var() !dbg !11 {
define void @overflow_iter_var(i1 %arg) !dbg !11 {
entry:
call void @llvm.dbg.value(metadata i16 0, metadata !16, metadata !DIExpression()), !dbg !18
br label %for.cond
@@ -16,7 +16,7 @@ entry:
for.cond: ; preds = %for.body, %entry
call void @llvm.dbg.value(metadata i16 0, metadata !16, metadata !DIExpression()), !dbg !18
call void @llvm.dbg.value(metadata i16 undef, metadata !20, metadata !DIExpression()), !dbg !21
br i1 undef, label %for.end, label %for.body
br i1 %arg, label %for.end, label %for.body
for.body: ; preds = %for.cond
%0 = load i16, ptr undef, align 1

View File

@@ -1,9 +1,9 @@
; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
define void @test() {
define void @test(i1 %arg) {
entry:
br i1 undef, label %split1, label %split2
br i1 %arg, label %split1, label %split2
split1:
store i16 undef, ptr undef, align 2

View File

@@ -5,7 +5,7 @@
@g = external global i32
declare void @modifyG()
define i32 @foo() {
define i32 @foo(i1 %arg) {
; CHECK: MemoryUse(liveOnEntry)
; CHECK-NEXT: %1 = load i32
%1 = load i32, ptr @g
@@ -29,11 +29,11 @@ declare void @readEverything() readonly
declare void @clobberEverything()
; CHECK-LABEL: define void @bar
define void @bar() {
define void @bar(i1 %arg) {
; CHECK: 1 = MemoryDef(liveOnEntry)
; CHECK-NEXT: call void @clobberEverything()
call void @clobberEverything()
br i1 undef, label %if.end, label %if.then
br i1 %arg, label %if.end, label %if.then
if.then:
; CHECK: MemoryUse(1)

View File

@@ -195,7 +195,7 @@ Ret:
}
; CHECK-LABEL: define {{.*}} @loop2(
define i8 @loop2(ptr %p) {
define i8 @loop2(ptr %p, i1 %arg) {
entry:
; CHECK: 1 = MemoryDef(liveOnEntry)
; CHECK-NEXT: store i8
@@ -207,7 +207,7 @@ entry:
; CHECK: 3 = MemoryDef(2)
; CHECK-NEXT: %after = call ptr @llvm.launder.invariant.group.p0(ptr %p)
%after = call ptr @llvm.launder.invariant.group.p0(ptr %p)
br i1 undef, label %Loop.Body, label %Loop.End
br i1 %arg, label %Loop.Body, label %Loop.End
Loop.Body:
; CHECK: MemoryUse(6)
@@ -221,7 +221,7 @@ Loop.Body:
; CHECK: 4 = MemoryDef(6)
store i8 4, ptr %after, !invariant.group !0
br i1 undef, label %Loop.End, label %Loop.Body
br i1 %arg, label %Loop.End, label %Loop.Body
Loop.End:
; CHECK: MemoryUse(5)
@@ -231,7 +231,7 @@ Loop.End:
; CHECK: MemoryUse(5) {{.*}} clobbered by 1
; CHECK-NEXT: %3 = load
%3 = load i8, ptr %p, align 4, !invariant.group !0
br i1 undef, label %Ret, label %Loop.Body
br i1 %arg, label %Ret, label %Loop.Body
Ret:
ret i8 %3
@@ -239,7 +239,7 @@ Ret:
; CHECK-LABEL: define {{.*}} @loop3(
define i8 @loop3(ptr %p) {
define i8 @loop3(ptr %p, i1 %arg) {
entry:
; CHECK: 1 = MemoryDef(liveOnEntry)
; CHECK-NEXT: store i8
@@ -251,7 +251,7 @@ entry:
; CHECK: 3 = MemoryDef(2)
; CHECK-NEXT: %after = call ptr @llvm.launder.invariant.group.p0(ptr %p)
%after = call ptr @llvm.launder.invariant.group.p0(ptr %p)
br i1 undef, label %Loop.Body, label %Loop.End
br i1 %arg, label %Loop.Body, label %Loop.End
Loop.Body:
; CHECK: MemoryUse(8)
@@ -266,7 +266,7 @@ Loop.Body:
; CHECK-NEXT: %1 = load i8
%1 = load i8, ptr %after, !invariant.group !0
br i1 undef, label %Loop.next, label %Loop.Body
br i1 %arg, label %Loop.next, label %Loop.Body
Loop.next:
; CHECK: 5 = MemoryDef(4)
; CHECK-NEXT: call void @clobber8
@@ -276,7 +276,7 @@ Loop.next:
; CHECK-NEXT: %2 = load i8
%2 = load i8, ptr %after, !invariant.group !0
br i1 undef, label %Loop.End, label %Loop.Body
br i1 %arg, label %Loop.End, label %Loop.Body
Loop.End:
; CHECK: MemoryUse(7)
@@ -290,14 +290,14 @@ Loop.End:
; CHECK: MemoryUse(6) {{.*}} clobbered by 7
; CHECK-NEXT: %4 = load
%4 = load i8, ptr %after, align 4, !invariant.group !0
br i1 undef, label %Ret, label %Loop.Body
br i1 %arg, label %Ret, label %Loop.Body
Ret:
ret i8 %3
}
; CHECK-LABEL: define {{.*}} @loop4(
define i8 @loop4(ptr %p) {
define i8 @loop4(ptr %p, i1 %arg) {
entry:
; CHECK: 1 = MemoryDef(liveOnEntry)
; CHECK-NEXT: store i8
@@ -308,7 +308,7 @@ entry:
; CHECK: 3 = MemoryDef(2)
; CHECK-NEXT: %after = call ptr @llvm.launder.invariant.group.p0(ptr %p)
%after = call ptr @llvm.launder.invariant.group.p0(ptr %p)
br i1 undef, label %Loop.Pre, label %Loop.End
br i1 %arg, label %Loop.Pre, label %Loop.End
Loop.Pre:
; CHECK: MemoryUse(2)
@@ -326,7 +326,7 @@ Loop.Body:
; CHECK: 4 = MemoryDef(6)
store i8 4, ptr %after, !invariant.group !0
br i1 undef, label %Loop.End, label %Loop.Body
br i1 %arg, label %Loop.End, label %Loop.Body
Loop.End:
; CHECK: MemoryUse(5)
@@ -336,7 +336,7 @@ Loop.End:
; CHECK: MemoryUse(5) {{.*}} clobbered by 1
; CHECK-NEXT: %4 = load
%4 = load i8, ptr %p, align 4, !invariant.group !0
br i1 undef, label %Ret, label %Loop.Body
br i1 %arg, label %Ret, label %Loop.Body
Ret:
ret i8 %3

View File

@@ -5,13 +5,13 @@
; CHECK-LABEL: @main
; CHECK-NOT: MemoryDef
define void @main() {
define void @main(i1 %arg) {
entry:
br label %for.cond120
for.cond120: ; preds = %for.body127, %entry
call void @foo()
br i1 undef, label %for.body127, label %for.cond.cleanup126
call void @foo(i1 %arg)
br i1 %arg, label %for.body127, label %for.cond.cleanup126
for.cond.cleanup126: ; preds = %for.cond120
unreachable

View File

@@ -1,8 +1,8 @@
; RUN: opt -verify-memoryssa -passes=loop-rotate %s -S | FileCheck %s
; REQUIRES: asserts
; CHECK-LABEL: @test()
define dso_local void @test() {
; CHECK-LABEL: @test(i1 %arg)
define dso_local void @test(i1 %arg) {
entry:
br label %preheader
@@ -13,7 +13,7 @@ l39:
%v40 = phi ptr [ @foo, %preheader ], [ %v43, %crit_edge ]
%v41 = call float %v40(float undef)
%v42 = load i32, ptr undef, align 8
br i1 undef, label %crit_edge, label %loopexit
br i1 %arg, label %crit_edge, label %loopexit
crit_edge:
%v43 = load ptr, ptr undef, align 8

View File

@@ -5,7 +5,7 @@
; otherwise, MemorySSA will assert.
; CHECK-LABEL: @f
define void @f() {
define void @f(i1 %arg) {
entry:
br label %for.body16
@@ -15,7 +15,7 @@ for.cond.cleanup15: ; preds = %for.body16
for.body16: ; preds = %for.body16.for.body16_crit_edge, %entry
%call.i = tail call float @expf(float 0.000000e+00) #1
%0 = load ptr, ptr undef, align 8
br i1 undef, label %for.cond.cleanup15, label %for.body16.for.body16_crit_edge
br i1 %arg, label %for.cond.cleanup15, label %for.body16.for.body16_crit_edge
for.body16.for.body16_crit_edge: ; preds = %for.body16
%.pre = load float, ptr undef, align 8

View File

@@ -73,7 +73,7 @@ phi.1:
}
; CHECK-LABEL: define void @cross_phi
define void @cross_phi(ptr noalias %p1, ptr noalias %p2) {
define void @cross_phi(ptr noalias %p1, ptr noalias %p2, i1 %arg) {
; CHECK: 1 = MemoryDef(liveOnEntry)
; CHECK-NEXT: store i8 0, ptr %p1
store i8 0, ptr %p1
@@ -82,19 +82,19 @@ define void @cross_phi(ptr noalias %p1, ptr noalias %p2) {
; LIMIT: MemoryUse(1)
; LIMIT-NEXT: load i8, ptr %p1
load i8, ptr %p1
br i1 undef, label %a, label %b
br i1 %arg, label %a, label %b
a:
; CHECK: 2 = MemoryDef(1)
; CHECK-NEXT: store i8 0, ptr %p2
store i8 0, ptr %p2
br i1 undef, label %c, label %d
br i1 %arg, label %c, label %d
b:
; CHECK: 3 = MemoryDef(1)
; CHECK-NEXT: store i8 1, ptr %p2
store i8 1, ptr %p2
br i1 undef, label %c, label %d
br i1 %arg, label %c, label %d
c:
; CHECK: 6 = MemoryPhi({a,2},{b,3})
@@ -121,7 +121,7 @@ e:
}
; CHECK-LABEL: define void @looped
define void @looped(ptr noalias %p1, ptr noalias %p2) {
define void @looped(ptr noalias %p1, ptr noalias %p2, i1 %arg) {
; CHECK: 1 = MemoryDef(liveOnEntry)
; CHECK-NEXT: store i8 0, ptr %p1
store i8 0, ptr %p1
@@ -132,7 +132,7 @@ loop.1:
; CHECK: 2 = MemoryDef(6)
; CHECK-NEXT: store i8 0, ptr %p2
store i8 0, ptr %p2
br i1 undef, label %loop.2, label %loop.3
br i1 %arg, label %loop.2, label %loop.3
loop.2:
; CHECK: 5 = MemoryPhi({loop.1,2},{loop.3,4})
@@ -151,23 +151,23 @@ loop.3:
; LIMIT: MemoryUse(4)
; LIMIT-NEXT: load i8, ptr %p1
load i8, ptr %p1
br i1 undef, label %loop.2, label %loop.1
br i1 %arg, label %loop.2, label %loop.1
}
; CHECK-LABEL: define void @looped_visitedonlyonce
define void @looped_visitedonlyonce(ptr noalias %p1, ptr noalias %p2) {
define void @looped_visitedonlyonce(ptr noalias %p1, ptr noalias %p2, i1 %arg) {
br label %while.cond
while.cond:
; CHECK: 5 = MemoryPhi({%0,liveOnEntry},{if.end,3})
; CHECK-NEXT: br i1 undef, label %if.then, label %if.end
br i1 undef, label %if.then, label %if.end
; CHECK-NEXT: br i1 %arg, label %if.then, label %if.end
br i1 %arg, label %if.then, label %if.end
if.then:
; CHECK: 1 = MemoryDef(5)
; CHECK-NEXT: store i8 0, ptr %p1
store i8 0, ptr %p1
br i1 undef, label %if.end, label %if.then2
br i1 %arg, label %if.end, label %if.then2
if.then2:
; CHECK: 2 = MemoryDef(1)

View File

@@ -8,9 +8,9 @@
@global.1 = external hidden unnamed_addr global double, align 8
; Function Attrs: nounwind ssp uwtable
define hidden fastcc void @hoge() unnamed_addr #0 {
define hidden fastcc void @hoge(i1 %arg) unnamed_addr #0 {
bb:
br i1 undef, label %bb1, label %bb2
br i1 %arg, label %bb1, label %bb2
bb1: ; preds = %bb
; These accesses should not conflict.
@@ -28,7 +28,7 @@ bb2: ; preds = %bb
br label %bb3
bb3: ; preds = %bb2
br i1 undef, label %bb4, label %bb6
br i1 %arg, label %bb4, label %bb6
bb4: ; preds = %bb3
; These accesses should conflict.

View File

@@ -7,7 +7,7 @@ target triple = "s390x-ibm-linux"
@g_993 = external dso_local local_unnamed_addr global i32, align 4
; CHECK-LABEL: @ff6
define dso_local fastcc void @ff6(i16 %arg1) unnamed_addr #0 {
define dso_local fastcc void @ff6(i16 %arg1, i1 %arg2) unnamed_addr #0 {
bb:
%tmp6.i = icmp sgt i16 %arg1, 0
br label %bb10
@@ -50,7 +50,7 @@ bb67: ; preds = %bb27
br label %bb75
bb75: ; preds = %bb67, %bb67.us.loopexit
br i1 undef, label %bb24.preheader, label %bb84.loopexit
br i1 %arg2, label %bb24.preheader, label %bb84.loopexit
bb81.loopexit: ; preds = %bb61.us
br label %bb10

View File

@@ -6,47 +6,47 @@ target triple = "s390x-ibm-linux"
@g_976 = external dso_local global i64, align 8
@g_1087 = external dso_local global ptr, align 8
; CHECK-LABEL: @f1()
; CHECK-LABEL: @f1(i1 %arg)
; CHECK: 5 = MemoryPhi(
; CHECK-NOT: 7 = MemoryPhi(
define dso_local fastcc void @f1() unnamed_addr #0 {
define dso_local fastcc void @f1(i1 %arg) unnamed_addr #0 {
label0:
br i1 undef, label %thread-pre-split.i.preheader, label %label5
br i1 %arg, label %thread-pre-split.i.preheader, label %label5
thread-pre-split.i.preheader: ; preds = %label0
br label %thread-pre-split.i
thread-pre-split.i.us: ; preds = %.critedge1.i.us
br i1 undef, label %.preheader.i.us.preheader, label %label2
br i1 %arg, label %.preheader.i.us.preheader, label %label2
.preheader.i.us.preheader: ; preds = %thread-pre-split.i.us
br label %.preheader.i.us
.preheader.i.us: ; preds = %._crit_edge.i.us, %.preheader.i.us.preheader
br i1 undef, label %.lr.ph.i.us, label %._crit_edge.i.us
br i1 %arg, label %.lr.ph.i.us, label %._crit_edge.i.us
.lr.ph.i.us: ; preds = %.preheader.i.us
br label %label1
label1: ; preds = %label1, %.lr.ph.i.us
br i1 undef, label %label1, label %._crit_edge.i.us
br i1 %arg, label %label1, label %._crit_edge.i.us
._crit_edge.i.us: ; preds = %label1, %.preheader.i.us
br i1 undef, label %.preheader.i.us, label %._crit_edge5.i.us
br i1 %arg, label %.preheader.i.us, label %._crit_edge5.i.us
._crit_edge5.i.us: ; preds = %._crit_edge.i.us
br label %label2
label2: ; preds = %._crit_edge5.i.us, %thread-pre-split.i.us
tail call void @foo16()
br i1 undef, label %.lr.ph8.i.us.preheader, label %label4
br i1 %arg, label %.lr.ph8.i.us.preheader, label %label4
.lr.ph8.i.us.preheader: ; preds = %label2
br label %.lr.ph8.i.us
.lr.ph8.i.us: ; preds = %.lr.ph8.i.us, %.lr.ph8.i.us.preheader
%tmp3 = load volatile i64, ptr @g_976, align 8
br i1 undef, label %.lr.ph8.i.us, label %._crit_edge9.i.us
br i1 %arg, label %.lr.ph8.i.us, label %._crit_edge9.i.us
._crit_edge9.i.us: ; preds = %.lr.ph8.i.us
br label %label4
@@ -55,31 +55,31 @@ label4: ; preds = %._crit_edge9.i.us, %labe
br i1 true, label %f9.exit, label %.critedge1.i.us
.critedge1.i.us: ; preds = %label4
br i1 undef, label %thread-pre-split.i.us, label %f9.exit
br i1 %arg, label %thread-pre-split.i.us, label %f9.exit
label5: ; preds = %label0
unreachable
thread-pre-split.i: ; preds = %.critedge1.i, %thread-pre-split.i.preheader
br i1 undef, label %.preheader.i.preheader, label %.critedge1.i
br i1 %arg, label %.preheader.i.preheader, label %.critedge1.i
.preheader.i.preheader: ; preds = %thread-pre-split.i
br label %.preheader.i
.preheader.i: ; preds = %._crit_edge.i, %.preheader.i.preheader
br i1 undef, label %.lr.ph.i, label %._crit_edge.i
br i1 %arg, label %.lr.ph.i, label %._crit_edge.i
.lr.ph.i: ; preds = %.preheader.i
br label %label6
label6: ; preds = %label6, %.lr.ph.i
br i1 undef, label %label6, label %._crit_edge.i.loopexit
br i1 %arg, label %label6, label %._crit_edge.i.loopexit
._crit_edge.i.loopexit: ; preds = %label6
br label %._crit_edge.i
._crit_edge.i: ; preds = %._crit_edge.i.loopexit, %.preheader.i
br i1 undef, label %.preheader.i, label %._crit_edge5.i
br i1 %arg, label %.preheader.i, label %._crit_edge5.i
._crit_edge5.i: ; preds = %._crit_edge.i
br label %.critedge1.i
@@ -88,7 +88,7 @@ label6: ; preds = %label6, %.lr.ph.i
%tmp7 = load i32, ptr @g_248, align 4
%tmp8 = xor i32 %tmp7, 55987
store i32 %tmp8, ptr @g_248, align 4
br i1 undef, label %thread-pre-split.i, label %f9.exit.loopexit
br i1 %arg, label %thread-pre-split.i, label %f9.exit.loopexit
f9.exit.loopexit: ; preds = %.critedge1.i
br label %f9.exit

View File

@@ -2,13 +2,13 @@
; REQUIRES: asserts
target triple = "x86_64-unknown-linux-gnu"
; CHECK-LABEL: @func()
define void @func() {
br i1 undef, label %bb5, label %bb3
; CHECK-LABEL: @func(i1 %arg)
define void @func(i1 %arg) {
br i1 %arg, label %bb5, label %bb3
bb5: ; preds = %bb5, %0
store i16 undef, ptr undef
br i1 undef, label %bb5, label %bb3
br i1 %arg, label %bb5, label %bb3
bb3: ; preds = %bb5, %0
ret void

View File

@@ -6,8 +6,8 @@ target triple = "s390x-ibm-linux"
@g_77 = external dso_local global i16, align 2
; CHECK-LABEL: @f1()
define void @f1() {
; CHECK-LABEL: @f1(i1 %arg)
define void @f1(i1 %arg) {
entry:
store i16 undef, ptr @g_77, align 2
br label %loop_pre
@@ -20,14 +20,14 @@ loop_pre:
for.cond.header:
store i32 0, ptr undef, align 4
br i1 undef, label %for.body, label %for.end
br i1 %arg, label %for.body, label %for.end
for.body:
%tmp1 = load volatile i16, ptr undef, align 2
br label %for.end
for.end:
br i1 undef, label %func.exit, label %for.cond.header
br i1 %arg, label %func.exit, label %for.cond.header
func.exit:
ret void
@@ -35,8 +35,8 @@ func.exit:
@g_159 = external dso_local global i32, align 4
; CHECK-LABEL: @f2()
define void @f2() {
; CHECK-LABEL: @f2(i1 %arg)
define void @f2(i1 %arg) {
entry:
br label %for.header.first
@@ -45,10 +45,10 @@ for.header.first:
for.body.first:
store i32 0, ptr @g_159, align 4
br i1 undef, label %for.body.first, label %for.end.first
br i1 %arg, label %for.body.first, label %for.end.first
for.end.first:
br i1 undef, label %lor.end, label %for.header.first
br i1 %arg, label %lor.end, label %for.header.first
lor.end:
br label %for.pre
@@ -67,14 +67,14 @@ for.header.second:
@g_271 = external dso_local global i8, align 2
@g_427 = external dso_local unnamed_addr global [9 x i16], align 2
; CHECK-LABEL: @f3()
define void @f3() {
; CHECK-LABEL: @f3(i1 %arg)
define void @f3(i1 %arg) {
entry:
br label %for.preheader
for.preheader:
store volatile i8 undef, ptr @g_271, align 2
br i1 undef, label %for.preheader, label %for.end
br i1 %arg, label %for.preheader, label %for.end
for.end:
br label %lbl_1058.i
@@ -91,7 +91,7 @@ for.cond3.preheader.i:
%cmp621.i130 = icmp ugt i32 undef, %conv620.i129
%conv622.i131 = zext i1 %cmp621.i130 to i32
store i32 %conv622.i131, ptr undef, align 4
br i1 undef, label %func.exit, label %for.cond3.preheader.i
br i1 %arg, label %func.exit, label %for.cond3.preheader.i
func.exit:
ret void
@@ -101,17 +101,17 @@ func.exit:
@g_244 = external dso_local global i64, align 8
@g_1164 = external dso_local global i64, align 8
; CHECK-LABEL: @f4()
define void @f4() {
; CHECK-LABEL: @f4(i1 %arg)
define void @f4(i1 %arg) {
entry:
br label %for.cond8.preheader
for.cond8.preheader:
store i32 0, ptr getelementptr inbounds ([3 x i32], ptr @g_6, i64 0, i64 2), align 4
br i1 undef, label %if.end, label %for.cond8.preheader
br i1 %arg, label %if.end, label %for.cond8.preheader
if.end:
br i1 undef, label %cleanup1270, label %for.cond504.preheader
br i1 %arg, label %cleanup1270, label %for.cond504.preheader
for.cond504.preheader:
store i64 undef, ptr @g_244, align 8
@@ -119,7 +119,7 @@ for.cond504.preheader:
for.cond559.preheader:
store i64 undef, ptr @g_1164, align 8
br i1 undef, label %for.cond559.preheader, label %cleanup1270
br i1 %arg, label %for.cond559.preheader, label %cleanup1270
cleanup1270:
ret void
@@ -127,7 +127,7 @@ cleanup1270:
@g_1504 = external dso_local local_unnamed_addr global ptr, align 8
define void @f5() {
define void @f5(i1 %arg) {
bb:
tail call fastcc void @f21()
br label %bb12.outer
@@ -136,7 +136,7 @@ bb12.outer.loopexit: ; No predecessors!
br label %bb12.outer
bb12.outer: ; preds = %bb12.outer.loopexit, %bb
br i1 undef, label %bb12.outer.split.us, label %bb12.preheader
br i1 %arg, label %bb12.outer.split.us, label %bb12.preheader
bb12.preheader: ; preds = %bb12.outer
br label %bb12
@@ -148,16 +148,16 @@ bb16.us.us: ; preds = %bb16.us.us, %bb12.o
br label %bb16.us.us
bb12: ; preds = %bb77.1, %bb12.preheader
br i1 undef, label %bb25.preheader, label %bb77
br i1 %arg, label %bb25.preheader, label %bb77
bb25.preheader: ; preds = %bb12.1, %bb12
br label %bb25
bb25: ; preds = %l0, %bb25.preheader
br i1 undef, label %bb62, label %bb71.thread
br i1 %arg, label %bb62, label %bb71.thread
bb62: ; preds = %bb25
br i1 undef, label %bb92.loopexit, label %l0
br i1 %arg, label %bb92.loopexit, label %l0
l0: ; preds = %bb62
br label %bb25
@@ -168,7 +168,7 @@ bb71.thread: ; preds = %bb25
bb77: ; preds = %bb12
%tmp78 = load ptr, ptr @g_1504, align 8
%tmp79 = load volatile ptr, ptr %tmp78, align 8
br i1 undef, label %bb91, label %bb12.1
br i1 %arg, label %bb91, label %bb12.1
bb91: ; preds = %bb77.1, %bb77
unreachable
@@ -180,10 +180,10 @@ bb92: ; preds = %bb92.loopexit, %bb7
ret void
bb12.1: ; preds = %bb77
br i1 undef, label %bb25.preheader, label %bb77.1
br i1 %arg, label %bb25.preheader, label %bb77.1
bb77.1: ; preds = %bb12.1
br i1 undef, label %bb91, label %bb12
br i1 %arg, label %bb91, label %bb12
}
declare void @f21()

View File

@@ -3,15 +3,15 @@
@v_295 = external dso_local global i16, align 1
@v_335 = external dso_local global i32, align 1
; CHECK-LABEL: @main()
; CHECK-LABEL: @main(i1 %arg)
; CHECK-NOT: 5 = MemoryPhi(
; CHECK-NOT: 6 = MemoryPhi(
; CHECK: 4 = MemoryPhi(
; CHECK-NOT: 7 = MemoryPhi(
define dso_local void @main() {
define dso_local void @main(i1 %arg) {
entry:
store i32 undef, ptr @v_335, align 1
br i1 undef, label %gate, label %exit
br i1 %arg, label %gate, label %exit
nopredentry1: ; No predecessors!
br label %preinfiniteloop
@@ -20,7 +20,7 @@ nopredentry2: ; No predecessors!
br label %gate
gate: ; preds = %nopredentry2, %entry
br i1 undef, label %preinfiniteloop, label %exit
br i1 %arg, label %preinfiniteloop, label %exit
preinfiniteloop: ; preds = %gate, %nopredentry1
br label %infiniteloop

View File

@@ -4,8 +4,8 @@
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
target triple = "aarch64"
; CHECK-LABEL: @e()
define void @e() {
; CHECK-LABEL: @e(i1 %arg)
define void @e(i1 %arg) {
entry:
br label %g
@@ -13,16 +13,16 @@ g: ; preds = %cleanup, %entry
%0 = load i32, ptr null, align 4
%and = and i32 %0, undef
store i32 %and, ptr null, align 4
br i1 undef, label %if.end8, label %if.then
br i1 %arg, label %if.end8, label %if.then
if.then: ; preds = %g
br i1 undef, label %k, label %cleanup
br i1 %arg, label %k, label %cleanup
k: ; preds = %if.end8, %if.then
br i1 undef, label %if.end8, label %cleanup
br i1 %arg, label %if.end8, label %cleanup
if.end8: ; preds = %k, %g
br i1 undef, label %for.cond.preheader, label %k
br i1 %arg, label %for.cond.preheader, label %k
for.cond.preheader: ; preds = %if.end8
unreachable

View File

@@ -1,15 +1,15 @@
; RUN: opt -disable-output -aa-pipeline=basic-aa -passes='loop-mssa(licm),print<memoryssa>' < %s 2>&1 | FileCheck %s
; CHECK-LABEL: @f()
; CHECK-LABEL: @f(i1 %arg)
; CHECK: lbl1:
; CHECK-NEXT: ; [[NO4:.*]] = MemoryPhi({entry,liveOnEntry},{lbl1.backedge,[[NO9:.*]]})
; CHECK-NEXT: ; [[NO2:.*]] = MemoryDef([[NO4]])
; CHECK-NEXT: call void @g()
; CHECK-NEXT: br i1 undef, label %for.end, label %if.else
; CHECK-NEXT: br i1 %arg, label %for.end, label %if.else
; CHECK: for.end:
; CHECK-NEXT: br i1 undef, label %lbl3, label %lbl2
; CHECK-NEXT: br i1 %arg, label %lbl3, label %lbl2
; CHECK: lbl2:
; CHECK-NEXT: ; [[NO8:.*]] = MemoryPhi({lbl3,[[NO7:.*]]},{for.end,[[NO2]]})
@@ -32,7 +32,7 @@
; CHECK-NEXT: 3 = MemoryDef([[NO6]])
; CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 1, ptr null)
define void @f() {
define void @f(i1 %arg) {
entry:
%e = alloca i16, align 1
br label %lbl1
@@ -40,16 +40,16 @@ entry:
lbl1: ; preds = %if.else, %cleanup, %entry
store i16 undef, ptr %e, align 1
call void @g()
br i1 undef, label %for.end, label %if.else
br i1 %arg, label %for.end, label %if.else
for.end: ; preds = %lbl1
br i1 undef, label %lbl3, label %lbl2
br i1 %arg, label %lbl3, label %lbl2
lbl2: ; preds = %lbl3, %for.end
br label %lbl3
lbl3: ; preds = %lbl2, %for.end
br i1 undef, label %lbl2, label %cleanup
br i1 %arg, label %lbl2, label %cleanup
cleanup: ; preds = %lbl3
%cleanup.dest = load i32, ptr undef, align 1

View File

@@ -1,36 +1,36 @@
; RUN: opt -disable-output -aa-pipeline=basic-aa -passes='loop-mssa(licm),print<memoryssa>' < %s 2>&1 | FileCheck %s
target triple = "x86_64-unknown-linux-gnu"
; CHECK-LABEL: @main()
; CHECK-LABEL: @main(i1 %arg)
; CHECK: 5 = MemoryPhi(
; CHECK-NOT: 7 = MemoryPhi(
@v_67 = external dso_local global i32, align 1
@v_76 = external dso_local global i16, align 1
@v_86 = external dso_local global ptr, align 1
define dso_local void @main() {
define dso_local void @main(i1 %arg) {
entry:
%v_59 = alloca i16, align 2
br label %for.cond
for.cond: ; preds = %for.body, %entry
br i1 undef, label %for.body, label %for.end
br i1 %arg, label %for.body, label %for.end
for.body: ; preds = %for.cond
store i16 undef, ptr %v_59, align 2
br label %for.cond
for.end: ; preds = %for.cond
br i1 undef, label %if.else568, label %cond.end82
br i1 %arg, label %if.else568, label %cond.end82
cond.false69: ; No predecessors!
br label %cond.end82
cond.end82: ; preds = %cond.false69, %cond.true55
br i1 undef, label %if.else568, label %land.lhs.true87
br i1 %arg, label %if.else568, label %land.lhs.true87
land.lhs.true87: ; preds = %cond.end82
br i1 undef, label %if.then88, label %if.else568
br i1 %arg, label %if.then88, label %if.else568
if.then88: ; preds = %land.lhs.true87
store ptr @v_76, ptr @v_86, align 1
@@ -45,13 +45,13 @@ if.end569: ; preds = %if.else568, %if.the
}
; CHECK-LABEL: @f()
; CHECK-LABEL: @f(i1 %arg)
; CHECK: 7 = MemoryPhi(
; CHECK: 6 = MemoryPhi(
; CHECK: 10 = MemoryPhi(
; CHECK: 9 = MemoryPhi(
; CHECK: 8 = MemoryPhi(
define void @f() {
define void @f(i1 %arg) {
entry:
%e = alloca i16, align 1
br label %lbl1
@@ -60,7 +60,7 @@ lbl1: ; preds = %if.else, %for.end5,
store i16 undef, ptr %e, align 1
%0 = load i16, ptr %e, align 1
%call = call i16 @g(i16 %0)
br i1 undef, label %for.end, label %if.else
br i1 %arg, label %for.end, label %if.else
for.end: ; preds = %if.then
br i1 true, label %for.cond2, label %lbl2
@@ -69,7 +69,7 @@ lbl2: ; preds = %for.body4, %if.end
br label %for.cond2
for.cond2: ; preds = %lbl3
br i1 undef, label %for.body4, label %for.end5
br i1 %arg, label %for.body4, label %for.end5
for.body4: ; preds = %for.cond2
br label %lbl2

View File

@@ -1,10 +1,10 @@
; RUN: opt -passes=loop-rotate -verify-memoryssa -S %s | FileCheck %s
; REQUIRES: asserts
; CHECK-LABEL: @func_35()
define void @func_35() {
; CHECK-LABEL: @func_35(i1 %arg)
define void @func_35(i1 %arg) {
entry:
br i1 undef, label %for.cond1704.preheader, label %return
br i1 %arg, label %for.cond1704.preheader, label %return
for.cond1704.preheader: ; preds = %entry
br label %for.cond1704
@@ -17,7 +17,7 @@ for.body1707: ; preds = %for.cond1704
br label %for.cond1704
for.body1102: ; preds = %for.body1102
br i1 undef, label %for.body1102, label %return
br i1 %arg, label %for.body1102, label %return
return.loopexit: ; preds = %for.cond1704
br label %return

View File

@@ -2,8 +2,8 @@
; REQUIRES: asserts
%struct.job_pool.6.7 = type { i32 }
; CHECK-LABEL: @f()
define dso_local void @f() {
; CHECK-LABEL: @f(i1 %arg)
define dso_local void @f(i1 %arg) {
entry:
br label %for.cond
@@ -26,7 +26,7 @@ for.body12: ; preds = %if.end40, %for.body
br label %if.then23
if.then23: ; preds = %for.body12
br i1 undef, label %if.then24, label %if.else
br i1 %arg, label %if.then24, label %if.else
if.then24: ; preds = %if.then23
%0 = load ptr, ptr undef, align 8

View File

@@ -2,9 +2,9 @@
; REQUIRES: asserts
; CHECK-LABEL: @c
define dso_local void @c(i32 signext %d) local_unnamed_addr {
define dso_local void @c(i32 signext %d, i1 %arg) local_unnamed_addr {
entry:
br i1 undef, label %while.end, label %while.body.lr.ph
br i1 %arg, label %while.end, label %while.body.lr.ph
while.body.lr.ph: ; preds = %entry
%tobool1 = icmp ne i32 %d, 0

View File

@@ -4,17 +4,17 @@
@global1 = external global i64, align 8
@global2 = external global [3 x [8 x [8 x { i32, i64, i8, i8, i16, i32 }]]], align 8
; CHECK-LABEL: @f0()
define void @f0() {
; CHECK-LABEL: @f0(i1 %arg)
define void @f0(i1 %arg) {
bb:
br label %bb18.i
bb18.i: ; preds = %bb49.us.i.us, %bb
tail call void @f1()
br i1 undef, label %.exit.loopexit, label %bb49.preheader.i
br i1 %arg, label %.exit.loopexit, label %bb49.preheader.i
bb49.preheader.i: ; preds = %bb18.i
br i1 undef, label %bb49.us.preheader.i, label %bb78.loopexit3.i
br i1 %arg, label %bb49.us.preheader.i, label %bb78.loopexit3.i
bb49.us.preheader.i: ; preds = %bb49.preheader.i
br label %bb49.us.i.us
@@ -33,7 +33,7 @@ bb78.loopexit3.i: ; preds = %bb49.preheader.i
br label %.exit
.exit: ; preds = %.exit.loopexit, %bb78.loopexit3.i, %bb49.us.i.preheader
br i1 undef, label %bb4.i.us.preheader, label %bb4.i
br i1 %arg, label %bb4.i.us.preheader, label %bb4.i
bb4.i.us.preheader: ; preds = %.exit
br label %bb4.i.us

View File

@@ -3,9 +3,9 @@
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
; CHECK-LABEL: @func()
; CHECK-LABEL: @func(i1 %arg)
; Function Attrs: noinline
define dso_local void @func() unnamed_addr #0 align 2 {
define dso_local void @func(i1 %arg) unnamed_addr #0 align 2 {
entry:
%NoFinalize.addr = alloca i8, align 1
call void @blah()
@@ -97,7 +97,7 @@ if.then94: ; preds = %while.end
br label %for.cond
for.cond: ; preds = %for.body, %if.then94
br i1 undef, label %for.body, label %if.end120
br i1 %arg, label %for.body, label %if.end120
for.body: ; preds = %for.cond
call void @blah()

View File

@@ -11,20 +11,20 @@ declare void @g()
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0
; CHECK-LABEL: @f
define void @f() align 2 {
define void @f(i1 %arg) align 2 {
entry:
%P = alloca ptr, align 8
br label %cond.end.i.i.i.i
cond.end.i.i.i.i: ; preds = %cont20, %entry
br i1 undef, label %cont20, label %if.end
br i1 %arg, label %cont20, label %if.end
cont20: ; preds = %cond.end.i.i.i.i, %cond.end.i.i.i.i, %cond.end.i.i.i.i
store ptr undef, ptr %P, align 8
br label %cond.end.i.i.i.i
if.end: ; preds = %cond.end.i.i.i.i
br i1 undef, label %cond.exit, label %handler.type_mismatch2.i
br i1 %arg, label %cond.exit, label %handler.type_mismatch2.i
handler.type_mismatch2.i: ; preds = %if.end
tail call void @g()

View File

@@ -8,9 +8,9 @@ target triple = "x86_64-grtev4-linux-gnu"
declare dso_local void @f()
; CHECK-LABEL: @foo
define dso_local void @foo() {
define dso_local void @foo(i1 %arg) {
entry:
br i1 undef, label %if.then, label %if.end
br i1 %arg, label %if.then, label %if.end
if.then: ; preds = %entry
br label %try.cont

View File

@@ -7,7 +7,7 @@ target triple = "x86_64-grtev4-linux-gnu"
; Check verification passes after loop rotate, when adding phis in blocks
; receiving incoming edges and adding phis in IDF blocks.
; CHECK-LABEL: @f
define void @f() align 32 {
define void @f(i1 %arg) align 32 {
entry:
br label %while.cond.outer
@@ -15,13 +15,13 @@ while.cond80.while.cond.loopexit_crit_edge: ; preds = %if.else99
br label %while.cond.outer
while.cond.outer: ; preds = %while.cond80.while.cond.loopexit_crit_edge, %entry
br i1 undef, label %while.cond.outer.return.loopexit2_crit_edge, label %while.body.lr.ph
br i1 %arg, label %while.cond.outer.return.loopexit2_crit_edge, label %while.body.lr.ph
while.body.lr.ph: ; preds = %while.cond.outer
br label %while.body
while.body: ; preds = %while.body.lr.ph
br i1 undef, label %if.then42, label %if.end61
br i1 %arg, label %if.then42, label %if.end61
if.then42: ; preds = %while.body
br label %return.loopexit2
@@ -30,7 +30,7 @@ if.end61: ; preds = %while.body
br label %while.body82
while.body82: ; preds = %if.end61
br i1 undef, label %return.loopexit, label %if.else99
br i1 %arg, label %return.loopexit, label %if.else99
if.else99: ; preds = %while.body82
store i32 0, ptr inttoptr (i64 44 to ptr), align 4

View File

@@ -3,9 +3,9 @@
@X = common global i32 0
; CHECK-LABEL: PHI Values for function: simple
define void @simple(ptr %ptr) {
define void @simple(ptr %ptr, i1 %arg) {
entry:
br i1 undef, label %if, label %else
br i1 %arg, label %if, label %else
if:
br label %end
@@ -26,9 +26,9 @@ end:
}
; CHECK-LABEL: PHI Values for function: chain
define void @chain() {
define void @chain(i1 %arg) {
entry:
br i1 undef, label %if1, label %else1
br i1 %arg, label %if1, label %else1
if1:
br label %middle
@@ -41,7 +41,7 @@ middle:
; CHECK-DAG: i32 0
; CHECK-DAG: i32 1
%phi1 = phi i32 [ 0, %if1 ], [ 1, %else1 ]
br i1 undef, label %if2, label %else2
br i1 %arg, label %if2, label %else2
if2:
br label %end
@@ -59,7 +59,7 @@ end:
}
; CHECK-LABEL: PHI Values for function: no_values
define void @no_values() {
define void @no_values(i1 %arg) {
entry:
ret void
@@ -71,7 +71,7 @@ unreachable:
}
; CHECK-LABEL: PHI Values for function: simple_loop
define void @simple_loop() {
define void @simple_loop(i1 %arg) {
entry:
br label %loop
@@ -79,23 +79,23 @@ loop:
; CHECK: PHI %phi has values:
; CHECK-DAG: i32 0
%phi = phi i32 [ 0, %entry ], [ %phi, %loop ]
br i1 undef, label %loop, label %end
br i1 %arg, label %loop, label %end
end:
ret void
}
; CHECK-LABEL: PHI Values for function: complex_loop
define void @complex_loop() {
define void @complex_loop(i1 %arg) {
entry:
br i1 undef, label %loop, label %end
br i1 %arg, label %loop, label %end
loop:
; CHECK: PHI %phi1 has values:
; CHECK-DAG: i32 0
; CHECK-DAG: i32 1
%phi1 = phi i32 [ 0, %entry ], [ %phi2, %then ]
br i1 undef, label %if, label %else
br i1 %arg, label %if, label %else
if:
br label %then
@@ -108,7 +108,7 @@ then:
; CHECK-DAG: i32 0
; CHECK-DAG: i32 1
%phi2 = phi i32 [ %phi1, %if ], [ 1, %else ]
br i1 undef, label %loop, label %end
br i1 %arg, label %loop, label %end
end:
; CHECK: PHI %phi3 has values:
@@ -120,9 +120,9 @@ end:
}
; CHECK-LABEL: PHI Values for function: strange_loop
define void @strange_loop() {
define void @strange_loop(i1 %arg) {
entry:
br i1 undef, label %ifelse, label %inloop
br i1 %arg, label %ifelse, label %inloop
loop:
; CHECK: PHI %phi1 has values:
@@ -131,7 +131,7 @@ loop:
; CHECK-DAG: i32 2
; CHECK-DAG: i32 3
%phi1 = phi i32 [ %phi3, %if ], [ 0, %else ], [ %phi2, %inloop ]
br i1 undef, label %inloop, label %end
br i1 %arg, label %inloop, label %end
inloop:
; CHECK: PHI %phi2 has values:
@@ -140,14 +140,14 @@ inloop:
; CHECK-DAG: i32 2
; CHECK-DAG: i32 3
%phi2 = phi i32 [ %phi1, %loop ], [ 1, %entry ]
br i1 undef, label %ifelse, label %loop
br i1 %arg, label %ifelse, label %loop
ifelse:
; CHECK: PHI %phi3 has values:
; CHECK-DAG: i32 2
; CHECK-DAG: i32 3
%phi3 = phi i32 [ 2, %entry ], [ 3, %inloop ]
br i1 undef, label %if, label %else
br i1 %arg, label %if, label %else
if:
br label %loop
@@ -160,9 +160,9 @@ end:
}
; CHECK-LABEL: PHI Values for function: mutual_loops
define void @mutual_loops() {
define void @mutual_loops(i1 %arg) {
entry:
br i1 undef, label %loop1, label %loop2
br i1 %arg, label %loop1, label %loop2
loop1:
; CHECK: PHI %phi1 has values:
@@ -172,10 +172,10 @@ loop1:
; CHECK-DAG: 3
; CHECK-DAG: 4
%phi1 = phi i32 [ 0, %entry ], [ %phi2, %loop1.then ], [ %phi3, %loop2.if ]
br i1 undef, label %loop1.if, label %loop1.else
br i1 %arg, label %loop1.if, label %loop1.else
loop1.if:
br i1 undef, label %loop1.then, label %loop2
br i1 %arg, label %loop1.then, label %loop2
loop1.else:
br label %loop1.then
@@ -188,7 +188,7 @@ loop1.then:
; CHECK-DAG: 3
; CHECK-DAG: 4
%phi2 = phi i32 [ 1, %loop1.if ], [ %phi1, %loop1.else ]
br i1 undef, label %loop1, label %end
br i1 %arg, label %loop1, label %end
loop2:
; CHECK: PHI %phi3 has values:
@@ -196,10 +196,10 @@ loop2:
; CHECK-DAG: 3
; CHECK-DAG: 4
%phi3 = phi i32 [ 2, %entry ], [ %phi4, %loop2.then ], [ 3, %loop1.if ]
br i1 undef, label %loop2.if, label %loop2.else
br i1 %arg, label %loop2.if, label %loop2.else
loop2.if:
br i1 undef, label %loop2.then, label %loop1
br i1 %arg, label %loop2.then, label %loop1
loop2.else:
br label %loop2.then
@@ -210,7 +210,7 @@ loop2.then:
; CHECK-DAG: 3
; CHECK-DAG: 4
%phi4 = phi i32 [ 4, %loop2.if ], [ %phi3, %loop2.else ]
br i1 undef, label %loop2, label %end
br i1 %arg, label %loop2, label %end
end:
; CHECK: PHI %phi5 has values:
@@ -224,7 +224,7 @@ end:
}
; CHECK-LABEL: PHI Values for function: nested_loops_several_values
define void @nested_loops_several_values() {
define void @nested_loops_several_values(i1 %arg) {
entry:
br label %loop1
@@ -233,14 +233,14 @@ loop1:
; CHECK-DAG: i32 0
; CHECK-DAG: %add
%phi1 = phi i32 [ 0, %entry ], [ %phi2, %loop2 ]
br i1 undef, label %loop2, label %end
br i1 %arg, label %loop2, label %end
loop2:
; CHECK: PHI %phi2 has values:
; CHECK-DAG: i32 0
; CHECK-DAG: %add
%phi2 = phi i32 [ %phi1, %loop1 ], [ %phi3, %loop3 ]
br i1 undef, label %loop3, label %loop1
br i1 %arg, label %loop3, label %loop1
loop3:
; CHECK: PHI %phi3 has values:
@@ -248,14 +248,14 @@ loop3:
; CHECK-DAG: %add
%phi3 = phi i32 [ %add, %loop3 ], [ %phi2, %loop2 ]
%add = add i32 %phi3, 1
br i1 undef, label %loop3, label %loop2
br i1 %arg, label %loop3, label %loop2
end:
ret void
}
; CHECK-LABEL: PHI Values for function: nested_loops_one_value
define void @nested_loops_one_value() {
define void @nested_loops_one_value(i1 %arg) {
entry:
br label %loop1
@@ -263,19 +263,19 @@ loop1:
; CHECK: PHI %phi1 has values:
; CHECK-DAG: i32 0
%phi1 = phi i32 [ 0, %entry ], [ %phi2, %loop2 ]
br i1 undef, label %loop2, label %end
br i1 %arg, label %loop2, label %end
loop2:
; CHECK: PHI %phi2 has values:
; CHECK-DAG: i32 0
%phi2 = phi i32 [ %phi1, %loop1 ], [ %phi3, %loop3 ]
br i1 undef, label %loop3, label %loop1
br i1 %arg, label %loop3, label %loop1
loop3:
; CHECK: PHI %phi3 has values:
; CHECK-DAG: i32 0
%phi3 = phi i32 [ 0, %loop3 ], [ %phi2, %loop2 ]
br i1 undef, label %loop3, label %loop2
br i1 %arg, label %loop3, label %loop2
end:
ret void

View File

@@ -4,7 +4,7 @@
; phi values analysis to segfault if it's not careful about that kind of thing.
; CHECK-LABEL: PHI Values for function: fn
define void @fn(ptr %arg) {
define void @fn(ptr %arg, i1 %arg1) {
entry:
br label %while1.cond
@@ -12,10 +12,10 @@ while1.cond:
; CHECK: PHI %phi1 has values:
; CHECK: ptr %arg
%phi1 = phi ptr [ %arg, %entry ], [ %phi2, %while1.then ]
br i1 undef, label %while1.end, label %while1.body
br i1 %arg1, label %while1.end, label %while1.body
while1.body:
br i1 undef, label %while1.then, label %while1.if
br i1 %arg1, label %while1.then, label %while1.if
while1.if:
br label %while1.then
@@ -33,16 +33,16 @@ while2.cond1:
; CHECK: PHI %phi3 has values:
; CHECK: ptr %arg
%phi3 = phi ptr [ %phi1, %while1.end ], [ %phi5, %while2.then ]
br i1 undef, label %while2.end, label %while2.body1
br i1 %arg1, label %while2.end, label %while2.body1
while2.body1:
br i1 undef, label %while2.cond2, label %while2.then
br i1 %arg1, label %while2.cond2, label %while2.then
while2.cond2:
; CHECK: PHI %phi4 has values:
; CHECK: ptr %arg
%phi4 = phi ptr [ %phi3, %while2.body1 ], [ %phi4, %while2.if ]
br i1 undef, label %while2.then, label %while2.if
br i1 %arg1, label %while2.then, label %while2.if
while2.if:
br label %while2.cond2
@@ -60,13 +60,13 @@ while3.cond1:
; CHECK: PHI %phi6 has values:
; CHECK: ptr %arg
%phi6 = phi ptr [ %phi3, %while2.end ], [ %phi7, %while3.cond2 ]
br i1 undef, label %while3.end, label %while3.cond2
br i1 %arg1, label %while3.end, label %while3.cond2
while3.cond2:
; CHECK: PHI %phi7 has values:
; CHECK: ptr %arg
%phi7 = phi ptr [ %phi6, %while3.cond1 ], [ %phi7, %while3.body ]
br i1 undef, label %while3.cond1, label %while3.body
br i1 %arg1, label %while3.cond1, label %while3.body
while3.body:
br label %while3.cond2
@@ -78,16 +78,16 @@ while4.cond1:
; CHECK: PHI %phi8 has values:
; CHECK: ptr %arg
%phi8 = phi ptr [ %phi6, %while3.end ], [ %phi10, %while4.then ]
br i1 undef, label %while4.end, label %while4.if
br i1 %arg1, label %while4.end, label %while4.if
while4.if:
br i1 undef, label %while4.cond2, label %while4.then
br i1 %arg1, label %while4.cond2, label %while4.then
while4.cond2:
; CHECK: PHI %phi9 has values:
; CHECK: ptr %arg
%phi9 = phi ptr [ %phi8, %while4.if ], [ %phi9, %while4.body ]
br i1 undef, label %while4.then, label %while4.body
br i1 %arg1, label %while4.then, label %while4.body
while4.body:
br label %while4.cond2
@@ -105,16 +105,16 @@ while5.cond:
; CHECK: PHI %phi11 has values:
; CHECK: ptr %arg
%phi11 = phi ptr [ %phi8, %while4.end ], [ %phi13, %while5.then ]
br i1 undef, label %while5.end, label %while5.body1
br i1 %arg1, label %while5.end, label %while5.body1
while5.body1:
br i1 undef, label %while5.if, label %while5.then
br i1 %arg1, label %while5.if, label %while5.then
while5.if:
; CHECK: PHI %phi12 has values:
; CHECK: ptr %arg
%phi12 = phi ptr [ %phi11, %while5.body1 ], [ %phi12, %while5.body2 ]
br i1 undef, label %while5.then, label %while5.body2
br i1 %arg1, label %while5.then, label %while5.body2
while5.body2:
br label %while5.if
@@ -132,7 +132,7 @@ while6.cond1:
; CHECK: PHI %phi14 has values:
; CHECK: ptr %arg
%phi14 = phi ptr [ %phi11, %while5.end ], [ %phi14, %while6.cond1 ]
br i1 undef, label %while6.cond2, label %while6.cond1
br i1 %arg1, label %while6.cond2, label %while6.cond1
while6.cond2:
; CHECK: PHI %phi15 has values:

View File

@@ -1,7 +1,7 @@
; RUN: opt < %s -passes='print<postdomtree>' 2>&1 | FileCheck %s
define internal void @f() {
define internal void @f(i1 %arg) {
entry:
br i1 undef, label %bb35, label %bb3.i
br i1 %arg, label %bb35, label %bb3.i
bb3.i:
br label %bb3.i

View File

@@ -1,10 +1,10 @@
; RUN: opt < %s -passes='print<postdomtree>' 2>&1 | FileCheck %s
define internal void @f() {
define internal void @f(i1 %arg) {
entry:
br i1 undef, label %a, label %bb3.i
br i1 %arg, label %a, label %bb3.i
a:
br i1 undef, label %bb35, label %bb3.i
br i1 %arg, label %bb35, label %bb3.i
bb3.i:
br label %bb3.i

View File

@@ -1,7 +1,7 @@
; RUN: opt < %s -passes='print<postdomtree>' 2>&1 | FileCheck %s
define internal void @f() {
define internal void @f(i1 %arg) {
entry:
br i1 undef, label %bb35, label %bb3.i
br i1 %arg, label %bb35, label %bb3.i
bb3.i:
br label %bb3.i

View File

@@ -1,5 +1,5 @@
; RUN: opt < %s -passes='print<postdomtree>' 2>&1 | FileCheck %s
define internal void @f() {
define internal void @f(i1 %arg) {
entry:
br i1 1, label %a, label %b
@@ -10,7 +10,7 @@ b:
br label %c
c:
br i1 undef, label %bb35, label %bb3.i
br i1 %arg, label %bb35, label %bb3.i
bb3.i:
br label %bb3.i

View File

@@ -2,7 +2,7 @@
; PR9633: Tests that SCEV handles the mul.i2 recurrence being folded to
; constant zero.
define signext i8 @func_14(i8 signext %p_18) nounwind readnone ssp {
define signext i8 @func_14(i8 signext %p_18, i1 %arg) nounwind readnone ssp {
entry:
br label %for.inc
@@ -16,7 +16,7 @@ for.cond:
%shl.i = select i1 %tobool.i, i32 13, i32 0
%shl.left.i = shl i32 %add, %shl.i
%conv.i4 = trunc i32 %shl.left.i to i8
br i1 undef, label %for.inc9, label %if.then
br i1 %arg, label %for.inc9, label %if.then
for.inc9:
%p_18.addr.011 = phi i8 [ %add12, %for.inc9 ], [ %p_18, %for.cond ]

View File

@@ -42,7 +42,7 @@ return: ; preds = %bb5
; PR10383
; These next two used to crash.
define void @test2(i1 %cmp, i64 %n) {
define void @test2(i1 %cmp, i64 %n, i1 %arg) {
; CHECK-LABEL: 'test2'
; CHECK-NEXT: Determining loop execution counts for: @test2
; CHECK-NEXT: Loop %for.body2: Unpredictable backedge-taken count.
@@ -69,13 +69,13 @@ for.body2:
%tmp114 = mul i64 %a0.08, %indvar
%mul542 = mul i64 %tmp114, %tmp111
%indvar.next = add i64 %indvar, 1
br i1 undef, label %end, label %for.body2
br i1 %arg, label %end, label %for.body2
end:
ret void
}
define i32 @test3() {
define i32 @test3(i1 %arg) {
; CHECK-LABEL: 'test3'
; CHECK-NEXT: Determining loop execution counts for: @test3
; CHECK-NEXT: Loop %for.inc479: Unpredictable backedge-taken count.
@@ -83,7 +83,7 @@ define i32 @test3() {
; CHECK-NEXT: Loop %for.inc479: Unpredictable symbolic max backedge-taken count.
;
if.then466:
br i1 undef, label %for.cond539.preheader, label %for.inc479
br i1 %arg, label %for.cond539.preheader, label %for.inc479
for.inc479:
%a2.07 = phi i32 [ %add495, %for.inc479 ], [ 0, %if.then466 ]
@@ -93,7 +93,7 @@ for.inc479:
%mul493 = mul i32 %mul491, %mul484
%add495 = add nsw i32 %mul493, %a2.07
%inc497 = add nsw i32 %j.36, 1
br i1 undef, label %for.cond539.preheader, label %for.inc479
br i1 %arg, label %for.cond539.preheader, label %for.inc479
for.cond539.preheader:
unreachable

View File

@@ -5,14 +5,14 @@
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
target triple = "x86_64-unknown-linux-gnu"
define i32 @test() {
define i32 @test(i1 %arg) {
entry:
%0 = load ptr, ptr undef, align 8 ; <ptr> [#uses=1]
%1 = ptrtoint ptr %0 to i64 ; <i64> [#uses=1]
%2 = sub i64 undef, %1 ; <i64> [#uses=1]
%3 = lshr i64 %2, 3 ; <i64> [#uses=1]
%4 = trunc i64 %3 to i32 ; <i32> [#uses=2]
br i1 undef, label %bb10, label %bb4.i
br i1 %arg, label %bb10, label %bb4.i
bb4.i: ; preds = %bb4.i, %entry
%i.0.i6 = phi i32 [ %8, %bb4.i ], [ 0, %entry ] ; <i32> [#uses=2]

View File

@@ -207,9 +207,9 @@ module asm ".previous"
%union.pager_info = type <{ [4 x i8] }>
%union.sigval = type <{ [8 x i8] }>
define i32 @vlrureclaim(ptr %mp) nounwind {
define i32 @vlrureclaim(ptr %mp, i1 %arg) nounwind {
entry:
br i1 undef, label %if.then11, label %do.end
br i1 %arg, label %if.then11, label %do.end
if.then11: ; preds = %entry
br label %do.end
@@ -230,19 +230,19 @@ while.body: ; preds = %while.cond
br label %while.cond27
while.cond27: ; preds = %while.body36, %while.body
br i1 undef, label %do.body288.loopexit, label %land.rhs
br i1 %arg, label %do.body288.loopexit, label %land.rhs
land.rhs: ; preds = %while.cond27
br i1 undef, label %while.body36, label %while.end
br i1 %arg, label %while.body36, label %while.end
while.body36: ; preds = %land.rhs
br label %while.cond27
while.end: ; preds = %land.rhs
br i1 undef, label %do.body288.loopexit4, label %do.body46
br i1 %arg, label %do.body288.loopexit4, label %do.body46
do.body46: ; preds = %while.end
br i1 undef, label %if.else64, label %if.then53
br i1 %arg, label %if.else64, label %if.then53
if.then53: ; preds = %do.body46
br label %if.end72
@@ -252,58 +252,58 @@ if.else64: ; preds = %do.body46
if.end72: ; preds = %if.else64, %if.then53
%dec = add i32 %count.0, -1 ; <i32> [#uses=2]
br i1 undef, label %next_iter, label %if.end111
br i1 %arg, label %next_iter, label %if.end111
if.end111: ; preds = %if.end72
br i1 undef, label %lor.lhs.false, label %do.body145
br i1 %arg, label %lor.lhs.false, label %do.body145
lor.lhs.false: ; preds = %if.end111
br i1 undef, label %lor.lhs.false122, label %do.body145
br i1 %arg, label %lor.lhs.false122, label %do.body145
lor.lhs.false122: ; preds = %lor.lhs.false
br i1 undef, label %lor.lhs.false128, label %do.body145
br i1 %arg, label %lor.lhs.false128, label %do.body145
lor.lhs.false128: ; preds = %lor.lhs.false122
br i1 undef, label %do.body162, label %land.lhs.true
br i1 %arg, label %do.body162, label %land.lhs.true
land.lhs.true: ; preds = %lor.lhs.false128
br i1 undef, label %do.body145, label %do.body162
br i1 %arg, label %do.body145, label %do.body162
do.body145: ; preds = %land.lhs.true, %lor.lhs.false122, %lor.lhs.false, %if.end111
br i1 undef, label %if.then156, label %next_iter
br i1 %arg, label %if.then156, label %next_iter
if.then156: ; preds = %do.body145
br label %next_iter
do.body162: ; preds = %land.lhs.true, %lor.lhs.false128
br i1 undef, label %if.then173, label %do.end177
br i1 %arg, label %if.then173, label %do.end177
if.then173: ; preds = %do.body162
br label %do.end177
do.end177: ; preds = %if.then173, %do.body162
br i1 undef, label %do.body185, label %if.then182
br i1 %arg, label %do.body185, label %if.then182
if.then182: ; preds = %do.end177
br label %next_iter_mntunlocked
do.body185: ; preds = %do.end177
br i1 undef, label %if.then196, label %do.end202
br i1 %arg, label %if.then196, label %do.end202
if.then196: ; preds = %do.body185
br label %do.end202
do.end202: ; preds = %if.then196, %do.body185
br i1 undef, label %lor.lhs.false207, label %if.then231
br i1 %arg, label %lor.lhs.false207, label %if.then231
lor.lhs.false207: ; preds = %do.end202
br i1 undef, label %lor.lhs.false214, label %if.then231
br i1 %arg, label %lor.lhs.false214, label %if.then231
lor.lhs.false214: ; preds = %lor.lhs.false207
br i1 undef, label %do.end236, label %land.lhs.true221
br i1 %arg, label %do.end236, label %land.lhs.true221
land.lhs.true221: ; preds = %lor.lhs.false214
br i1 undef, label %if.then231, label %do.end236
br i1 %arg, label %if.then231, label %do.end236
if.then231: ; preds = %land.lhs.true221, %lor.lhs.false207, %do.end202
br label %next_iter_mntunlocked
@@ -312,7 +312,7 @@ do.end236: ; preds = %land.lhs.true221, %lor.lhs.false214
br label %next_iter_mntunlocked
next_iter_mntunlocked: ; preds = %do.end236, %if.then231, %if.then182
br i1 undef, label %yield, label %do.body269
br i1 %arg, label %yield, label %do.body269
next_iter: ; preds = %if.then156, %do.body145, %if.end72
%rem2482 = and i32 %dec, 255 ; <i32> [#uses=1]
@@ -320,7 +320,7 @@ next_iter: ; preds = %if.then156, %do.body145, %if.end72
br i1 %cmp249, label %do.body253, label %while.cond
do.body253: ; preds = %next_iter
br i1 undef, label %if.then264, label %yield
br i1 %arg, label %if.then264, label %yield
if.then264: ; preds = %do.body253
br label %yield
@@ -329,7 +329,7 @@ yield: ; preds = %if.then264, %do.body253, %next_iter_mntunlocked
br label %do.body269
do.body269: ; preds = %yield, %next_iter_mntunlocked
br i1 undef, label %if.then280, label %while.cond.outer.backedge
br i1 %arg, label %if.then280, label %while.cond.outer.backedge
if.then280: ; preds = %do.body269
br label %while.cond.outer.backedge
@@ -344,7 +344,7 @@ do.body288.loopexit4: ; preds = %while.end, %while.cond
br label %do.body288
do.body288: ; preds = %do.body288.loopexit4, %do.body288.loopexit
br i1 undef, label %if.then299, label %do.end303
br i1 %arg, label %if.then299, label %do.end303
if.then299: ; preds = %do.body288
br label %do.end303

View File

@@ -7,7 +7,7 @@
; Check that we can evaluate a sum of phis from two different loops in any
; order.
define void @test_00() {
define void @test_00(i1 %arg) {
; CHECK-LABEL: 'test_00'
; CHECK-NEXT: Classifying expressions for: @test_00
; CHECK-NEXT: %phi1 = phi i32 [ 10, %entry ], [ %phi1.inc, %loop1 ]
@@ -383,7 +383,7 @@ exit:
; Another mix of previous use cases that demonstrates that incorrect picking of
; a loop for a recurrence may cause a crash of SCEV analysis.
define void @test_04() {
define void @test_04(i1 %arg) {
; CHECK-LABEL: 'test_04'
; CHECK-NEXT: Classifying expressions for: @test_04
; CHECK-NEXT: %tmp = phi i64 [ 2, %bb ], [ %tmp4, %bb3 ]
@@ -425,7 +425,7 @@ bb:
loop1:
%tmp = phi i64 [ 2, %bb ], [ %tmp4, %bb3 ]
%tmp2 = trunc i64 %tmp to i32
br i1 undef, label %loop2, label %bb3
br i1 %arg, label %loop2, label %bb3
bb3:
%tmp4 = add nuw nsw i64 %tmp, 1

View File

@@ -6,10 +6,10 @@ target triple = "x86_64-apple-macosx10.11.0"
; SCEVExpander would try to RAUW %val_2 with %c.lcssa, breaking "def
; dominates uses".
define void @pr27232(i32 %val) {
define void @pr27232(i32 %val, i1 %arg) {
; CHECK-LABEL: @pr27232(
entry:
br i1 undef, label %loop_0.cond, label %for.body.us
br i1 %arg, label %loop_0.cond, label %for.body.us
for.body.us:
br label %loop_0.cond
@@ -29,12 +29,12 @@ loop_1.ph:
br label %loop_1
loop_0:
br i1 undef, label %loop_0, label %loop_1.exit
br i1 %arg, label %loop_0, label %loop_1.exit
loop_1:
%d.1 = phi i32 [ %c.lcssa, %loop_1 ], [ %val_2, %loop_1.ph ]
%t.1 = phi i32 [ %val_2, %loop_1 ], [ %c.lcssa, %loop_1.ph ]
br i1 undef, label %leave, label %loop_1
br i1 %arg, label %leave, label %loop_1
leave:
ret void
@@ -44,10 +44,10 @@ leave:
; @ReplaceArg_0 and @ReplaceArg_1 used to trigger a failed cast<>
; assertion in SCEVExpander.
define void @ReplaceArg_0(i32 %val) {
define void @ReplaceArg_0(i32 %val, i1 %arg) {
; CHECK-LABEL: @ReplaceArg_0(
entry:
br i1 undef, label %loop_0.cond, label %for.body.us
br i1 %arg, label %loop_0.cond, label %for.body.us
for.body.us:
br label %loop_0.cond
@@ -66,21 +66,21 @@ loop_1.ph:
br label %loop_1
loop_0:
br i1 undef, label %loop_0, label %loop_1.exit
br i1 %arg, label %loop_0, label %loop_1.exit
loop_1:
%d.1 = phi i32 [ %c.lcssa, %loop_1 ], [ %val, %loop_1.ph ]
%t.1 = phi i32 [ %val, %loop_1 ], [ %c.lcssa, %loop_1.ph ]
br i1 undef, label %leave, label %loop_1
br i1 %arg, label %leave, label %loop_1
leave:
ret void
}
define void @ReplaceArg_1(i32 %val) {
define void @ReplaceArg_1(i32 %val, i1 %arg) {
; CHECK-LABEL: @ReplaceArg_1(
entry:
br i1 undef, label %loop_0.cond, label %for.body.us
br i1 %arg, label %loop_0.cond, label %for.body.us
for.body.us:
br label %loop_0.cond
@@ -99,12 +99,12 @@ loop_1.ph:
br label %loop_1
loop_0:
br i1 undef, label %loop_0, label %loop_1.exit
br i1 %arg, label %loop_0, label %loop_1.exit
loop_1:
%t.1 = phi i32 [ %val, %loop_1 ], [ %c.lcssa, %loop_1.ph ]
%d.1 = phi i32 [ %c.lcssa, %loop_1 ], [ %val, %loop_1.ph ]
br i1 undef, label %leave, label %loop_1
br i1 %arg, label %leave, label %loop_1
leave:
ret void

View File

@@ -1,7 +1,7 @@
; RUN: opt < %s -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck %s
; PR13228
define void @f() nounwind uwtable readnone {
define void @f(i1 %arg) nounwind uwtable readnone {
entry:
br label %for.cond
@@ -14,7 +14,7 @@ for.cond: ; preds = %for.cond, %entry
while.cond: ; preds = %while.body, %for.cond
%b.2 = phi i8 [ %add, %while.body ], [ 0, %for.cond ]
br i1 undef, label %while.end, label %while.body
br i1 %arg, label %while.end, label %while.body
while.body: ; preds = %while.cond
%add = add i8 %b.2, %c.0

View File

@@ -8,7 +8,7 @@ declare { i16, i1 } @llvm.usub.with.overflow.i16(i16, i16) nounwind readnone
declare { i16, i1 } @llvm.smul.with.overflow.i16(i16, i16) nounwind readnone
declare { i16, i1 } @llvm.umul.with.overflow.i16(i16, i16) nounwind readnone
define void @uadd_exhaustive() {
define void @uadd_exhaustive(i1 %arg) {
; CHECK-LABEL: 'uadd_exhaustive'
; CHECK-NEXT: Determining loop execution counts for: @uadd_exhaustive
; CHECK-NEXT: Loop %for.body: backedge-taken count is i16 35
@@ -17,7 +17,7 @@ define void @uadd_exhaustive() {
; CHECK-NEXT: Loop %for.body: Trip multiple is 36
;
entry:
br i1 undef, label %for.end, label %for.body.preheader
br i1 %arg, label %for.end, label %for.body.preheader
for.body.preheader: ; preds = %entry
br label %for.body
@@ -33,7 +33,7 @@ for.end: ; preds = %for.body, %entry
ret void
}
define void @sadd_exhaustive() {
define void @sadd_exhaustive(i1 %arg) {
; CHECK-LABEL: 'sadd_exhaustive'
; CHECK-NEXT: Determining loop execution counts for: @sadd_exhaustive
; CHECK-NEXT: Loop %for.body: backedge-taken count is i16 67
@@ -42,7 +42,7 @@ define void @sadd_exhaustive() {
; CHECK-NEXT: Loop %for.body: Trip multiple is 68
;
entry:
br i1 undef, label %for.end, label %for.body.preheader
br i1 %arg, label %for.end, label %for.body.preheader
for.body.preheader: ; preds = %entry
br label %for.body
@@ -58,7 +58,7 @@ for.end: ; preds = %for.body, %entry
ret void
}
define void @usub_exhaustive() {
define void @usub_exhaustive(i1 %arg) {
; CHECK-LABEL: 'usub_exhaustive'
; CHECK-NEXT: Determining loop execution counts for: @usub_exhaustive
; CHECK-NEXT: Loop %for.body: backedge-taken count is i16 50
@@ -67,7 +67,7 @@ define void @usub_exhaustive() {
; CHECK-NEXT: Loop %for.body: Trip multiple is 51
;
entry:
br i1 undef, label %for.end, label %for.body.preheader
br i1 %arg, label %for.end, label %for.body.preheader
for.body.preheader: ; preds = %entry
br label %for.body
@@ -83,7 +83,7 @@ for.end: ; preds = %for.body, %entry
ret void
}
define void @ssub_exhaustive() {
define void @ssub_exhaustive(i1 %arg) {
; CHECK-LABEL: 'ssub_exhaustive'
; CHECK-NEXT: Determining loop execution counts for: @ssub_exhaustive
; CHECK-NEXT: Loop %for.body: backedge-taken count is i16 68
@@ -92,7 +92,7 @@ define void @ssub_exhaustive() {
; CHECK-NEXT: Loop %for.body: Trip multiple is 69
;
entry:
br i1 undef, label %for.end, label %for.body.preheader
br i1 %arg, label %for.end, label %for.body.preheader
for.body.preheader: ; preds = %entry
br label %for.body
@@ -108,7 +108,7 @@ for.end: ; preds = %for.body, %entry
ret void
}
define void @smul_exhaustive() {
define void @smul_exhaustive(i1 %arg) {
; CHECK-LABEL: 'smul_exhaustive'
; CHECK-NEXT: Determining loop execution counts for: @smul_exhaustive
; CHECK-NEXT: Loop %for.body: backedge-taken count is i32 14
@@ -117,7 +117,7 @@ define void @smul_exhaustive() {
; CHECK-NEXT: Loop %for.body: Trip multiple is 15
;
entry:
br i1 undef, label %for.end, label %for.body.preheader
br i1 %arg, label %for.end, label %for.body.preheader
for.body.preheader: ; preds = %entry
br label %for.body
@@ -133,7 +133,7 @@ for.end: ; preds = %for.body, %entry
ret void
}
define void @umul_exhaustive() {
define void @umul_exhaustive(i1 %arg) {
; CHECK-LABEL: 'umul_exhaustive'
; CHECK-NEXT: Determining loop execution counts for: @umul_exhaustive
; CHECK-NEXT: Loop %for.body: backedge-taken count is i32 15
@@ -142,7 +142,7 @@ define void @umul_exhaustive() {
; CHECK-NEXT: Loop %for.body: Trip multiple is 16
;
entry:
br i1 undef, label %for.end, label %for.body.preheader
br i1 %arg, label %for.end, label %for.body.preheader
for.body.preheader: ; preds = %entry
br label %for.body
@@ -158,7 +158,7 @@ for.end: ; preds = %for.body, %entry
ret void
}
define void @uadd_symbolic_start(i16 %start) {
define void @uadd_symbolic_start(i16 %start, i1 %arg) {
; CHECK-LABEL: 'uadd_symbolic_start'
; CHECK-NEXT: Determining loop execution counts for: @uadd_symbolic_start
; CHECK-NEXT: Loop %for.body: backedge-taken count is (-1 + (-1 * %start))
@@ -167,7 +167,7 @@ define void @uadd_symbolic_start(i16 %start) {
; CHECK-NEXT: Loop %for.body: Trip multiple is 1
;
entry:
br i1 undef, label %for.end, label %for.body.preheader
br i1 %arg, label %for.end, label %for.body.preheader
for.body.preheader: ; preds = %entry
br label %for.body
@@ -183,7 +183,7 @@ for.end: ; preds = %for.body, %entry
ret void
}
define void @sadd_symbolic_start(i16 %start) {
define void @sadd_symbolic_start(i16 %start, i1 %arg) {
; CHECK-LABEL: 'sadd_symbolic_start'
; CHECK-NEXT: Determining loop execution counts for: @sadd_symbolic_start
; CHECK-NEXT: Loop %for.body: backedge-taken count is (32767 + (-1 * %start))
@@ -192,7 +192,7 @@ define void @sadd_symbolic_start(i16 %start) {
; CHECK-NEXT: Loop %for.body: Trip multiple is 1
;
entry:
br i1 undef, label %for.end, label %for.body.preheader
br i1 %arg, label %for.end, label %for.body.preheader
for.body.preheader: ; preds = %entry
br label %for.body
@@ -208,7 +208,7 @@ for.end: ; preds = %for.body, %entry
ret void
}
define void @sadd_symbolic_start2(i16 %start) {
define void @sadd_symbolic_start2(i16 %start, i1 %arg) {
; CHECK-LABEL: 'sadd_symbolic_start2'
; CHECK-NEXT: Determining loop execution counts for: @sadd_symbolic_start2
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
@@ -216,7 +216,7 @@ define void @sadd_symbolic_start2(i16 %start) {
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
;
entry:
br i1 undef, label %for.end, label %for.body.preheader
br i1 %arg, label %for.end, label %for.body.preheader
for.body.preheader: ; preds = %entry
br label %for.body
@@ -233,7 +233,7 @@ for.end: ; preds = %for.body, %entry
ret void
}
define void @sadd_symbolic_swapped(i16 %start) {
define void @sadd_symbolic_swapped(i16 %start, i1 %arg) {
; CHECK-LABEL: 'sadd_symbolic_swapped'
; CHECK-NEXT: Determining loop execution counts for: @sadd_symbolic_swapped
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
@@ -241,7 +241,7 @@ define void @sadd_symbolic_swapped(i16 %start) {
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
;
entry:
br i1 undef, label %for.end, label %for.body.preheader
br i1 %arg, label %for.end, label %for.body.preheader
for.body.preheader: ; preds = %entry
br label %for.body
@@ -257,7 +257,7 @@ for.end: ; preds = %for.body, %entry
ret void
}
define void @usub_symbolic_start(i16 %start) {
define void @usub_symbolic_start(i16 %start, i1 %arg) {
; CHECK-LABEL: 'usub_symbolic_start'
; CHECK-NEXT: Determining loop execution counts for: @usub_symbolic_start
; CHECK-NEXT: Loop %for.body: backedge-taken count is %start
@@ -266,7 +266,7 @@ define void @usub_symbolic_start(i16 %start) {
; CHECK-NEXT: Loop %for.body: Trip multiple is 1
;
entry:
br i1 undef, label %for.end, label %for.body.preheader
br i1 %arg, label %for.end, label %for.body.preheader
for.body.preheader: ; preds = %entry
br label %for.body
@@ -282,7 +282,7 @@ for.end: ; preds = %for.body, %entry
ret void
}
define void @ssub_symbolic_start(i16 %start) {
define void @ssub_symbolic_start(i16 %start, i1 %arg) {
; CHECK-LABEL: 'ssub_symbolic_start'
; CHECK-NEXT: Determining loop execution counts for: @ssub_symbolic_start
; CHECK-NEXT: Loop %for.body: backedge-taken count is (-32768 + %start)
@@ -291,7 +291,7 @@ define void @ssub_symbolic_start(i16 %start) {
; CHECK-NEXT: Loop %for.body: Trip multiple is 1
;
entry:
br i1 undef, label %for.end, label %for.body.preheader
br i1 %arg, label %for.end, label %for.body.preheader
for.body.preheader: ; preds = %entry
br label %for.body
@@ -307,7 +307,7 @@ for.end: ; preds = %for.body, %entry
ret void
}
define void @smul_symbolic_start(i16 %start) {
define void @smul_symbolic_start(i16 %start, i1 %arg) {
; CHECK-LABEL: 'smul_symbolic_start'
; CHECK-NEXT: Determining loop execution counts for: @smul_symbolic_start
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
@@ -315,7 +315,7 @@ define void @smul_symbolic_start(i16 %start) {
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
;
entry:
br i1 undef, label %for.end, label %for.body.preheader
br i1 %arg, label %for.end, label %for.body.preheader
for.body.preheader: ; preds = %entry
br label %for.body
@@ -331,7 +331,7 @@ for.end: ; preds = %for.body, %entry
ret void
}
define void @umul_symbolic_start(i16 %start) {
define void @umul_symbolic_start(i16 %start, i1 %arg) {
; CHECK-LABEL: 'umul_symbolic_start'
; CHECK-NEXT: Determining loop execution counts for: @umul_symbolic_start
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
@@ -339,7 +339,7 @@ define void @umul_symbolic_start(i16 %start) {
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
;
entry:
br i1 undef, label %for.end, label %for.body.preheader
br i1 %arg, label %for.end, label %for.body.preheader
for.body.preheader: ; preds = %entry
br label %for.body
@@ -355,7 +355,7 @@ for.end: ; preds = %for.body, %entry
ret void
}
define void @sadd_symbolic_non_latch(i16 %start) {
define void @sadd_symbolic_non_latch(i16 %start, i1 %arg) {
; CHECK-LABEL: 'sadd_symbolic_non_latch'
; CHECK-NEXT: Determining loop execution counts for: @sadd_symbolic_non_latch
; CHECK-NEXT: Loop %for.body: <multiple exits> backedge-taken count is ((230 + (-1 * %start)) umin (32767 + (-1 * %start)))
@@ -368,7 +368,7 @@ define void @sadd_symbolic_non_latch(i16 %start) {
; CHECK-NEXT: Loop %for.body: Trip multiple is 1
;
entry:
br i1 undef, label %for.end, label %for.body.preheader
br i1 %arg, label %for.end, label %for.body.preheader
for.body.preheader: ; preds = %entry
br label %for.body

View File

@@ -3,9 +3,9 @@
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32"
%JavaObject = type { ptr, ptr }
define void @JnJVM_antlr_CSharpCodeGenerator_genBitSet__Lantlr_collections_impl_BitSet_2I(ptr, ptr, i32) {
define void @JnJVM_antlr_CSharpCodeGenerator_genBitSet__Lantlr_collections_impl_BitSet_2I(ptr, ptr, i32, i1 %arg) {
start:
br i1 undef, label %"stack overflow", label %"no stack overflow"
br i1 %arg, label %"stack overflow", label %"no stack overflow"
"GOTO or IF*2": ; preds = %"true verifyAndComputePtr89", %verifyNullCont84
unreachable
@@ -27,151 +27,151 @@ end: ; preds = %"no exception block35"
ret void
"no stack overflow": ; preds = %start
br i1 undef, label %verifyNullCont, label %"no stack overflow.end_crit_edge"
br i1 %arg, label %verifyNullCont, label %"no stack overflow.end_crit_edge"
"no stack overflow.end_crit_edge": ; preds = %"no stack overflow"
ret void
verifyNullCont: ; preds = %"no stack overflow"
br i1 undef, label %verifyNullCont9, label %verifyNullCont.end_crit_edge
br i1 %arg, label %verifyNullCont9, label %verifyNullCont.end_crit_edge
verifyNullCont.end_crit_edge: ; preds = %verifyNullCont
ret void
verifyNullCont9: ; preds = %verifyNullCont
br i1 undef, label %verifyNullCont12, label %verifyNullCont9.end_crit_edge
br i1 %arg, label %verifyNullCont12, label %verifyNullCont9.end_crit_edge
verifyNullCont9.end_crit_edge: ; preds = %verifyNullCont9
ret void
verifyNullCont12: ; preds = %verifyNullCont9
br i1 undef, label %"no exception block13", label %verifyNullCont12.end_crit_edge
br i1 %arg, label %"no exception block13", label %verifyNullCont12.end_crit_edge
verifyNullCont12.end_crit_edge: ; preds = %verifyNullCont12
ret void
"no exception block13": ; preds = %verifyNullCont12
br i1 undef, label %verifyNullExit14, label %verifyNullCont15
br i1 %arg, label %verifyNullExit14, label %verifyNullCont15
verifyNullExit14: ; preds = %"no exception block13"
ret void
verifyNullCont15: ; preds = %"no exception block13"
br i1 undef, label %"no exception block16", label %verifyNullCont15.end_crit_edge
br i1 %arg, label %"no exception block16", label %verifyNullCont15.end_crit_edge
verifyNullCont15.end_crit_edge: ; preds = %verifyNullCont15
ret void
"no exception block16": ; preds = %verifyNullCont15
br i1 undef, label %verifyNullExit17, label %verifyNullCont18
br i1 %arg, label %verifyNullExit17, label %verifyNullCont18
verifyNullExit17: ; preds = %"no exception block16"
ret void
verifyNullCont18: ; preds = %"no exception block16"
br i1 undef, label %"no exception block19", label %verifyNullCont18.end_crit_edge
br i1 %arg, label %"no exception block19", label %verifyNullCont18.end_crit_edge
verifyNullCont18.end_crit_edge: ; preds = %verifyNullCont18
ret void
"no exception block19": ; preds = %verifyNullCont18
br i1 undef, label %verifyNullExit20, label %verifyNullCont21
br i1 %arg, label %verifyNullExit20, label %verifyNullCont21
verifyNullExit20: ; preds = %"no exception block19"
ret void
verifyNullCont21: ; preds = %"no exception block19"
br i1 undef, label %verifyNullCont24, label %verifyNullCont21.end_crit_edge
br i1 %arg, label %verifyNullCont24, label %verifyNullCont21.end_crit_edge
verifyNullCont21.end_crit_edge: ; preds = %verifyNullCont21
ret void
verifyNullCont24: ; preds = %verifyNullCont21
br i1 undef, label %verifyNullCont27, label %verifyNullCont24.end_crit_edge
br i1 %arg, label %verifyNullCont27, label %verifyNullCont24.end_crit_edge
verifyNullCont24.end_crit_edge: ; preds = %verifyNullCont24
ret void
verifyNullCont27: ; preds = %verifyNullCont24
br i1 undef, label %verifyNullCont32, label %verifyNullCont27.end_crit_edge
br i1 %arg, label %verifyNullCont32, label %verifyNullCont27.end_crit_edge
verifyNullCont27.end_crit_edge: ; preds = %verifyNullCont27
ret void
verifyNullCont32: ; preds = %verifyNullCont27
br i1 undef, label %verifyNullExit33, label %verifyNullCont34
br i1 %arg, label %verifyNullExit33, label %verifyNullCont34
verifyNullExit33: ; preds = %verifyNullCont32
ret void
verifyNullCont34: ; preds = %verifyNullCont32
br i1 undef, label %"no exception block35", label %verifyNullCont34.end_crit_edge
br i1 %arg, label %"no exception block35", label %verifyNullCont34.end_crit_edge
verifyNullCont34.end_crit_edge: ; preds = %verifyNullCont34
ret void
"no exception block35": ; preds = %verifyNullCont34
br i1 undef, label %end, label %verifyNullCont60
br i1 %arg, label %end, label %verifyNullCont60
verifyNullCont60: ; preds = %"no exception block35"
br i1 undef, label %verifyNullCont63, label %verifyNullCont60.end_crit_edge
br i1 %arg, label %verifyNullCont63, label %verifyNullCont60.end_crit_edge
verifyNullCont60.end_crit_edge: ; preds = %verifyNullCont60
ret void
verifyNullCont63: ; preds = %verifyNullCont60
br i1 undef, label %"no exception block64", label %verifyNullCont63.end_crit_edge
br i1 %arg, label %"no exception block64", label %verifyNullCont63.end_crit_edge
verifyNullCont63.end_crit_edge: ; preds = %verifyNullCont63
ret void
"no exception block64": ; preds = %verifyNullCont63
br i1 undef, label %verifyNullExit65, label %verifyNullCont66
br i1 %arg, label %verifyNullExit65, label %verifyNullCont66
verifyNullExit65: ; preds = %"no exception block64"
ret void
verifyNullCont66: ; preds = %"no exception block64"
br i1 undef, label %"no exception block67", label %verifyNullCont66.end_crit_edge
br i1 %arg, label %"no exception block67", label %verifyNullCont66.end_crit_edge
verifyNullCont66.end_crit_edge: ; preds = %verifyNullCont66
ret void
"no exception block67": ; preds = %verifyNullCont66
br i1 undef, label %verifyNullExit68, label %verifyNullCont69
br i1 %arg, label %verifyNullExit68, label %verifyNullCont69
verifyNullExit68: ; preds = %"no exception block67"
ret void
verifyNullCont69: ; preds = %"no exception block67"
br i1 undef, label %"no exception block70", label %verifyNullCont69.end_crit_edge
br i1 %arg, label %"no exception block70", label %verifyNullCont69.end_crit_edge
verifyNullCont69.end_crit_edge: ; preds = %verifyNullCont69
ret void
"no exception block70": ; preds = %verifyNullCont69
br i1 undef, label %verifyNullExit71, label %verifyNullCont72
br i1 %arg, label %verifyNullExit71, label %verifyNullCont72
verifyNullExit71: ; preds = %"no exception block70"
ret void
verifyNullCont72: ; preds = %"no exception block70"
br i1 undef, label %verifyNullCont75, label %verifyNullCont72.end_crit_edge
br i1 %arg, label %verifyNullCont75, label %verifyNullCont72.end_crit_edge
verifyNullCont72.end_crit_edge: ; preds = %verifyNullCont72
ret void
verifyNullCont75: ; preds = %verifyNullCont72
br i1 undef, label %verifyNullCont78, label %verifyNullCont75.end_crit_edge
br i1 %arg, label %verifyNullCont78, label %verifyNullCont75.end_crit_edge
verifyNullCont75.end_crit_edge: ; preds = %verifyNullCont75
ret void
verifyNullCont78: ; preds = %verifyNullCont75
br i1 undef, label %"verifyNullCont78.GOTO or IF*4_crit_edge", label %verifyNullCont78.end_crit_edge
br i1 %arg, label %"verifyNullCont78.GOTO or IF*4_crit_edge", label %verifyNullCont78.end_crit_edge
"verifyNullCont78.GOTO or IF*4_crit_edge": ; preds = %verifyNullCont78
br i1 undef, label %verifyNullExit80, label %verifyNullCont81
br i1 %arg, label %verifyNullExit80, label %verifyNullCont81
verifyNullCont78.end_crit_edge: ; preds = %verifyNullCont78
ret void
@@ -185,28 +185,28 @@ verifyNullCont81: ; preds = %"verifyNullCont78.GOTO or IF*4_crit_e
br i1 %5, label %verifyNullCont84, label %verifyNullCont172
verifyNullCont84: ; preds = %verifyNullCont81
br i1 undef, label %"GOTO or IF*2", label %verifyNullCont86
br i1 %arg, label %"GOTO or IF*2", label %verifyNullCont86
verifyNullCont86: ; preds = %verifyNullCont84
br i1 undef, label %"true verifyAndComputePtr", label %"false verifyAndComputePtr"
br i1 %arg, label %"true verifyAndComputePtr", label %"false verifyAndComputePtr"
"true verifyAndComputePtr": ; preds = %verifyNullCont86
br i1 undef, label %"true verifyAndComputePtr89", label %"false verifyAndComputePtr90"
br i1 %arg, label %"true verifyAndComputePtr89", label %"false verifyAndComputePtr90"
"false verifyAndComputePtr": ; preds = %verifyNullCont86
ret void
"true verifyAndComputePtr89": ; preds = %"true verifyAndComputePtr"
br i1 undef, label %"GOTO or IF*6", label %"GOTO or IF*2"
br i1 %arg, label %"GOTO or IF*6", label %"GOTO or IF*2"
"false verifyAndComputePtr90": ; preds = %"true verifyAndComputePtr"
ret void
verifyNullCont126: ; preds = %"GOTO or IF*6"
br i1 undef, label %"true verifyAndComputePtr127", label %"false verifyAndComputePtr128"
br i1 %arg, label %"true verifyAndComputePtr127", label %"false verifyAndComputePtr128"
"true verifyAndComputePtr127": ; preds = %verifyNullCont126
br i1 undef, label %"true verifyAndComputePtr131.GOTO or IF*6_crit_edge", label %"GOTO or IF*5"
br i1 %arg, label %"true verifyAndComputePtr131.GOTO or IF*6_crit_edge", label %"GOTO or IF*5"
"false verifyAndComputePtr128": ; preds = %verifyNullCont126
ret void

View File

@@ -11,12 +11,12 @@ target triple = "x86_64-pc-linux-gnux32"
%"class.llvm::AttributeImpl.2.1802.3601.5914.6685.7456.8227.9255.9769.10026.18508" = type <{ ptr, %"class.llvm::FoldingSetImpl::Node.1.1801.3600.5913.6684.7455.8226.9254.9768.10025.18505", i8, [3 x i8] }>
; Function Attrs: nounwind uwtable
define void @_ZNK4llvm11AttrBuilder13hasAttributesENS_12AttributeSetEy() #0 align 2 {
define void @_ZNK4llvm11AttrBuilder13hasAttributesENS_12AttributeSetEy(i1 %arg) #0 align 2 {
entry:
br i1 undef, label %cond.false, label %_ZNK4llvm12AttributeSet11getNumSlotsEv.exit
br i1 %arg, label %cond.false, label %_ZNK4llvm12AttributeSet11getNumSlotsEv.exit
_ZNK4llvm12AttributeSet11getNumSlotsEv.exit: ; preds = %entry
br i1 undef, label %cond.false, label %for.body.lr.ph.for.body.lr.ph.split_crit_edge
br i1 %arg, label %cond.false, label %for.body.lr.ph.for.body.lr.ph.split_crit_edge
for.body.lr.ph.for.body.lr.ph.split_crit_edge: ; preds = %_ZNK4llvm12AttributeSet11getNumSlotsEv.exit
br label %land.lhs.true.i
@@ -30,15 +30,15 @@ cond.false.i.split: ; preds = %land.lhs.true.i
unreachable
_ZNK4llvm12AttributeSet12getSlotIndexEj.exit: ; preds = %land.lhs.true.i
br i1 undef, label %for.end, label %for.inc
br i1 %arg, label %for.end, label %for.inc
for.inc: ; preds = %_ZNK4llvm12AttributeSet12getSlotIndexEj.exit
%inc = add i32 %I.099, 1
br i1 undef, label %cond.false, label %land.lhs.true.i
br i1 %arg, label %cond.false, label %land.lhs.true.i
for.end: ; preds = %_ZNK4llvm12AttributeSet12getSlotIndexEj.exit
%I.099.lcssa129 = phi i32 [ %I.099, %_ZNK4llvm12AttributeSet12getSlotIndexEj.exit ]
br i1 undef, label %cond.false, label %_ZNK4llvm12AttributeSet3endEj.exit
br i1 %arg, label %cond.false, label %_ZNK4llvm12AttributeSet3endEj.exit
cond.false: ; preds = %for.end, %for.inc, %_ZNK4llvm12AttributeSet11getNumSlotsEv.exit, %entry
unreachable
@@ -49,7 +49,7 @@ _ZNK4llvm12AttributeSet3endEj.exit: ; preds = %for.end
%NumAttrs.i.i.i = getelementptr inbounds %"class.llvm::AttributeSetNode.230.2029.3828.6141.6912.7683.8454.9482.9996.10253.18506", ptr %0, i32 0, i32 1
%1 = load i32, ptr %NumAttrs.i.i.i, align 4, !tbaa !8
%add.ptr.i.i.i55 = getelementptr inbounds %"class.llvm::Attribute.222.2021.3820.6133.6904.7675.8446.9474.9988.10245.18509", ptr undef, i32 %1
br i1 undef, label %return, label %for.body11
br i1 %arg, label %return, label %for.body11
for.cond9: ; preds = %_ZNK4llvm9Attribute13getKindAsEnumEv.exit
%cmp10 = icmp eq ptr %incdec.ptr, %add.ptr.i.i.i55
@@ -70,7 +70,7 @@ _ZNK4llvm9Attribute15isEnumAttributeEv.exit: ; preds = %for.body11
_ZNK4llvm9Attribute13getKindAsEnumEv.exit: ; preds = %_ZNK4llvm9Attribute15isEnumAttributeEv.exit, %_ZNK4llvm9Attribute15isEnumAttributeEv.exit
%incdec.ptr = getelementptr inbounds %"class.llvm::Attribute.222.2021.3820.6133.6904.7675.8446.9474.9988.10245.18509", ptr %I5.096, i32 1
br i1 undef, label %for.cond9, label %return
br i1 %arg, label %for.cond9, label %return
cond.false21: ; preds = %_ZNK4llvm9Attribute15isEnumAttributeEv.exit, %for.body11
unreachable

View File

@@ -3,17 +3,17 @@
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64--linux-gnu"
define void @unbounded() {
define void @unbounded(i1 %arg) {
block_A:
%0 = sext i32 undef to i64
br i1 undef, label %block_F, label %block_G
br i1 %arg, label %block_F, label %block_G
block_C: ; preds = %block_F
br i1 undef, label %block_D, label %block_E
br i1 %arg, label %block_D, label %block_E
block_D: ; preds = %block_D, %block_C
br i1 undef, label %block_E, label %block_D
br i1 %arg, label %block_E, label %block_D
block_E: ; preds = %block_D, %block_C
%iv2 = phi i64 [ %4, %block_D ], [ %4, %block_C ]

View File

@@ -4,7 +4,7 @@
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define void @hoge1() {
define void @hoge1(i1 %arg) {
;
; CHECK-LABEL: 'hoge1'
; CHECK-NEXT: Determining loop execution counts for: @hoge1
@@ -21,7 +21,7 @@ define void @hoge1() {
; CHECK-NEXT: Loop %bb2: Unpredictable symbolic max backedge-taken count.
;
bb:
br i1 undef, label %bb4, label %bb2
br i1 %arg, label %bb4, label %bb2
bb2: ; preds = %bb2, %bb
br i1 false, label %bb4, label %bb2
@@ -53,7 +53,7 @@ bb18: ; preds = %bb13
ret void
}
define void @hoge2() {
define void @hoge2(i1 %arg) {
;
; CHECK-LABEL: 'hoge2'
; CHECK-NEXT: Determining loop execution counts for: @hoge2
@@ -69,7 +69,7 @@ define void @hoge2() {
; CHECK-NEXT: Loop %bb2: Unpredictable symbolic max backedge-taken count.
;
bb:
br i1 undef, label %bb4, label %bb2
br i1 %arg, label %bb4, label %bb2
bb2: ; preds = %bb2, %bb
br i1 false, label %bb4, label %bb2

View File

@@ -223,7 +223,7 @@ for.end: ; preds = %for.body, %entry
; different loops where neither dominates the other. This used to crash
; because we expected the arguments to an AddExpr to have a strict
; dominance order.
define void @test_no_dom(ptr %data) {
define void @test_no_dom(ptr %data, i1 %arg) {
entry:
load double, ptr %data
br label %for.body
@@ -231,7 +231,7 @@ entry:
for.body:
%indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.latch ]
%indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
br i1 undef, label %subloop1, label %subloop2
br i1 %arg, label %subloop1, label %subloop2
subloop1:
%iv1 = phi i32 [0, %for.body], [%iv1.next, %subloop1]
@@ -266,7 +266,7 @@ declare ptr @get_addr(i32 %i)
; In this case, checking %addr1 and %add2 involves two addrecs in two
; different loops where neither dominates the other. This is analogous
; to test_no_dom, but involves SCEVUnknown as opposed to SCEVAddRecExpr.
define void @test_no_dom2(ptr %data) {
define void @test_no_dom2(ptr %data, i1 %arg) {
entry:
load double, ptr %data
br label %for.body
@@ -274,7 +274,7 @@ entry:
for.body:
%indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.latch ]
%indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
br i1 undef, label %subloop1, label %subloop2
br i1 %arg, label %subloop1, label %subloop2
subloop1:
%iv1 = phi i32 [0, %for.body], [%iv1.next, %subloop1]

View File

@@ -6,12 +6,12 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
; Function Attrs: norecurse nounwind uwtable
define void @ehF() #0 {
define void @ehF(i1 %arg) #0 {
entry:
br i1 undef, label %if.then.i, label %hup.exit
br i1 %arg, label %if.then.i, label %hup.exit
if.then.i: ; preds = %entry
br i1 undef, label %for.body.lr.ph.i, label %hup.exit
br i1 %arg, label %for.body.lr.ph.i, label %hup.exit
for.body.lr.ph.i: ; preds = %if.then.i
br label %for.body.i

View File

@@ -15,13 +15,13 @@
; CHECK-NOT: phi
; CHECK-NOT: icmp
; CHECK: ret void
define void @test() {
define void @test(i1 %arg) {
entry:
%xor1 = xor i32 0, 1
br label %b17
b17:
br i1 undef, label %b22, label %b18
br i1 %arg, label %b22, label %b18
b18:
%phi1 = phi i32 [ %add1, %b18 ], [ %xor1, %b17 ]

View File

@@ -1,7 +1,7 @@
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
; RUN: opt -disable-output "-passes=print<scalar-evolution>" < %s 2>&1 | FileCheck %s
define void @test_lshr() {
define void @test_lshr(i1 %arg) {
; CHECK-LABEL: 'test_lshr'
; CHECK-NEXT: Classifying expressions for: @test_lshr
; CHECK-NEXT: %iv.lshr = phi i64 [ 1023, %entry ], [ %iv.lshr.next, %loop ]
@@ -18,13 +18,13 @@ entry:
loop:
%iv.lshr = phi i64 [1023, %entry], [%iv.lshr.next, %loop]
%iv.lshr.next = lshr i64 %iv.lshr, 1
br i1 undef, label %exit, label %loop
br i1 %arg, label %exit, label %loop
exit:
ret void
}
; Deliberate overflow doesn't change range
define void @test_lshr2() {
define void @test_lshr2(i1 %arg) {
; CHECK-LABEL: 'test_lshr2'
; CHECK-NEXT: Classifying expressions for: @test_lshr2
; CHECK-NEXT: %iv.lshr = phi i64 [ 1023, %entry ], [ %iv.lshr.next, %loop ]
@@ -41,13 +41,13 @@ entry:
loop:
%iv.lshr = phi i64 [1023, %entry], [%iv.lshr.next, %loop]
%iv.lshr.next = lshr i64 %iv.lshr, 4
br i1 undef, label %exit, label %loop
br i1 %arg, label %exit, label %loop
exit:
ret void
}
define void @test_ashr_zeros() {
define void @test_ashr_zeros(i1 %arg) {
; CHECK-LABEL: 'test_ashr_zeros'
; CHECK-NEXT: Classifying expressions for: @test_ashr_zeros
; CHECK-NEXT: %iv.ashr = phi i64 [ 1023, %entry ], [ %iv.ashr.next, %loop ]
@@ -64,12 +64,12 @@ entry:
loop:
%iv.ashr = phi i64 [1023, %entry], [%iv.ashr.next, %loop]
%iv.ashr.next = ashr i64 %iv.ashr, 1
br i1 undef, label %exit, label %loop
br i1 %arg, label %exit, label %loop
exit:
ret void
}
define void @test_ashr_ones() {
define void @test_ashr_ones(i1 %arg) {
; CHECK-LABEL: 'test_ashr_ones'
; CHECK-NEXT: Classifying expressions for: @test_ashr_ones
; CHECK-NEXT: %iv.ashr = phi i64 [ -1023, %entry ], [ %iv.ashr.next, %loop ]
@@ -86,13 +86,13 @@ entry:
loop:
%iv.ashr = phi i64 [-1023, %entry], [%iv.ashr.next, %loop]
%iv.ashr.next = ashr i64 %iv.ashr, 1
br i1 undef, label %exit, label %loop
br i1 %arg, label %exit, label %loop
exit:
ret void
}
; Same as previous, but swapped operands to phi
define void @test_ashr_ones2() {
define void @test_ashr_ones2(i1 %arg) {
; CHECK-LABEL: 'test_ashr_ones2'
; CHECK-NEXT: Classifying expressions for: @test_ashr_ones2
; CHECK-NEXT: %iv.ashr = phi i64 [ %iv.ashr.next, %loop ], [ -1023, %entry ]
@@ -109,14 +109,14 @@ entry:
loop:
%iv.ashr = phi i64 [%iv.ashr.next, %loop], [-1023, %entry]
%iv.ashr.next = ashr i64 %iv.ashr, 1
br i1 undef, label %exit, label %loop
br i1 %arg, label %exit, label %loop
exit:
ret void
}
; negative case for when start is unknown
define void @test_ashr_unknown(i64 %start) {
define void @test_ashr_unknown(i64 %start, i1 %arg) {
; CHECK-LABEL: 'test_ashr_unknown'
; CHECK-NEXT: Classifying expressions for: @test_ashr_unknown
; CHECK-NEXT: %iv.ashr = phi i64 [ %start, %entry ], [ %iv.ashr.next, %loop ]
@@ -133,14 +133,14 @@ entry:
loop:
%iv.ashr = phi i64 [%start, %entry], [%iv.ashr.next, %loop]
%iv.ashr.next = ashr i64 %iv.ashr, 1
br i1 undef, label %exit, label %loop
br i1 %arg, label %exit, label %loop
exit:
ret void
}
; Negative case where we don't have a (shift) recurrence because the operands
; of the ashr are swapped. (This does end up being a divide recurrence.)
define void @test_ashr_wrong_op(i64 %start) {
define void @test_ashr_wrong_op(i64 %start, i1 %arg) {
; CHECK-LABEL: 'test_ashr_wrong_op'
; CHECK-NEXT: Classifying expressions for: @test_ashr_wrong_op
; CHECK-NEXT: %iv.ashr = phi i64 [ %start, %entry ], [ %iv.ashr.next, %loop ]
@@ -157,13 +157,13 @@ entry:
loop:
%iv.ashr = phi i64 [%start, %entry], [%iv.ashr.next, %loop]
%iv.ashr.next = ashr i64 1, %iv.ashr
br i1 undef, label %exit, label %loop
br i1 %arg, label %exit, label %loop
exit:
ret void
}
define void @test_shl() {
define void @test_shl(i1 %arg) {
; CHECK-LABEL: 'test_shl'
; CHECK-NEXT: Classifying expressions for: @test_shl
; CHECK-NEXT: %iv.shl = phi i64 [ 8, %entry ], [ %iv.shl.next, %loop ]
@@ -180,13 +180,13 @@ entry:
loop:
%iv.shl = phi i64 [8, %entry], [%iv.shl.next, %loop]
%iv.shl.next = shl i64 %iv.shl, 1
br i1 undef, label %exit, label %loop
br i1 %arg, label %exit, label %loop
exit:
ret void
}
; use trip count to refine
define void @test_shl2() {
define void @test_shl2(i1 %arg) {
; CHECK-LABEL: 'test_shl2'
; CHECK-NEXT: Classifying expressions for: @test_shl2
; CHECK-NEXT: %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
@@ -251,7 +251,7 @@ exit:
}
; edge case on max value not overflowing
define void @test_shl4() {
define void @test_shl4(i1 %arg) {
; CHECK-LABEL: 'test_shl4'
; CHECK-NEXT: Classifying expressions for: @test_shl4
; CHECK-NEXT: %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
@@ -282,7 +282,7 @@ exit:
}
; other side of edge case from previous test
define void @test_shl5() {
define void @test_shl5(i1 %arg) {
; CHECK-LABEL: 'test_shl5'
; CHECK-NEXT: Classifying expressions for: @test_shl5
; CHECK-NEXT: %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
@@ -379,7 +379,7 @@ exit:
; Corner case where phi is not in a loop because it is in unreachable
; code (which loopinfo ignores, but simple recurrence matching does not).
define void @unreachable_phi() {
define void @unreachable_phi(i1 %arg) {
; CHECK-LABEL: 'unreachable_phi'
; CHECK-NEXT: Classifying expressions for: @unreachable_phi
; CHECK-NEXT: %p_58.addr.1 = phi i32 [ undef, %unreachable1 ], [ %sub2629, %unreachable2 ]
@@ -403,7 +403,7 @@ unreachable_nonloop:
; Corner case where phi is not in loop header because binop is in unreachable
; code (which loopinfo ignores, but simple recurrence matching does not).
define void @unreachable_binop() {
define void @unreachable_binop(i1 %arg) {
; CHECK-LABEL: 'unreachable_binop'
; CHECK-NEXT: Classifying expressions for: @unreachable_binop
; CHECK-NEXT: %p_58.addr.1 = phi i32 [ undef, %header ], [ %sub2629, %unreachable ]
@@ -423,7 +423,7 @@ header:
for.cond2295:
%p_58.addr.1 = phi i32 [ undef, %header ], [ %sub2629, %unreachable ]
br i1 undef, label %if.then2321, label %header
br i1 %arg, label %if.then2321, label %header
if.then2321:
ret void

View File

@@ -25,7 +25,7 @@ declare ptr @foo()
; CHECK-LABEL: 'test_sret'
; CHECK: %sret_gep{{.*}}(aligned)
; CHECK-NOT: %sret_gep_outside
define void @test_sret(ptr sret(%struct.A) %result) {
define void @test_sret(ptr sret(%struct.A) %result, i1 %arg) {
%sret_gep = getelementptr inbounds %struct.A, ptr %result, i64 0, i32 1, i64 2
load i8, ptr %sret_gep
@@ -287,10 +287,10 @@ define void @infer_noalias2(ptr dereferenceable(8) noalias readonly %p) nosync {
; Just check that we don't crash.
; CHECK-LABEL: 'opaque_type_crasher'
define void @opaque_type_crasher(ptr dereferenceable(16) %a) {
define void @opaque_type_crasher(ptr dereferenceable(16) %a, i1 %arg) {
entry:
%ptr8 = getelementptr inbounds i8, ptr %a, i32 8
br i1 undef, label %if.then, label %if.end
br i1 %arg, label %if.then, label %if.end
if.then:
%res = load i32, ptr %ptr8, align 4

View File

@@ -4,7 +4,7 @@
; CHECK: @f
; CHECK: atomicrmw
define void @f() {
define void @f(i1 %arg) {
entry:
br label %def
@@ -14,5 +14,5 @@ define void @f() {
def:
%y = add i32 undef, undef
br i1 undef, label %use, label %use
br i1 %arg, label %use, label %use
}

View File

@@ -25,14 +25,14 @@ define void @mixed2() {
}
define void @region_nesting1() convergent {
define void @region_nesting1(i1 %arg) convergent {
A:
%tok1 = call token @llvm.experimental.convergence.entry()
%tok2 = call token @llvm.experimental.convergence.anchor()
br label %B
B:
br i1 undef, label %C, label %D
br i1 %arg, label %C, label %D
C:
call void @f() [ "convergencectrl"(token %tok1) ]
@@ -44,14 +44,14 @@ D:
}
; Mirror image of @region_nesting1
define void @region_nesting2() {
define void @region_nesting2(i1 %arg) {
A:
%tok1 = call token @llvm.experimental.convergence.anchor()
%tok2 = call token @llvm.experimental.convergence.anchor()
br label %B
B:
br i1 undef, label %C, label %D
br i1 %arg, label %C, label %D
C:
call void @f() [ "convergencectrl"(token %tok2) ]
@@ -62,14 +62,14 @@ D:
ret void
}
define void @loop_nesting() convergent {
define void @loop_nesting(i1 %arg) convergent {
A:
%a = call token @llvm.experimental.convergence.entry()
br label %B
B:
%b = call token @llvm.experimental.convergence.anchor()
br i1 undef, label %C, label %D
br i1 %arg, label %C, label %D
C:
%c = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %b) ]
@@ -78,7 +78,7 @@ C:
D:
call void @f() [ "convergencectrl"(token %b) ]
br i1 undef, label %B, label %E
br i1 %arg, label %B, label %E
E:
ret void

View File

@@ -1,6 +1,6 @@
; RUN: llvm-dis < %s.bc | FileCheck %s
define void @loop_nesting() convergent {
define void @loop_nesting(i1 %arg) convergent {
A:
; CHECK-LABEL: A:
; CHECK: [[A:%.*]] = call token @llvm.experimental.convergence.entry()
@@ -13,7 +13,7 @@ B:
; CHECK: [[B:%.*]] = call token @llvm.experimental.convergence.anchor()
;
%b = call token @llvm.experimental.convergence.anchor()
br i1 undef, label %C, label %D
br i1 %arg, label %C, label %D
C:
; CHECK-LABEL: C:
@@ -29,7 +29,7 @@ D:
; CHECK: call void @f() [ "convergencectrl"(token [[B]]) ]
;
call void @f() [ "convergencectrl"(token %b) ]
br i1 undef, label %B, label %E
br i1 %arg, label %B, label %E
E:
ret void

View File

@@ -8,7 +8,7 @@ target triple = "thumbv7s-apple-ios5.0.0"
%struct.vm_object = type { i64 }
; Function Attrs: nounwind ssp
define void @f(ptr %object, ptr nocapture readonly %start) local_unnamed_addr #0 !dbg !11 {
define void @f(ptr %object, ptr nocapture readonly %start, i1 %arg) local_unnamed_addr #0 !dbg !11 {
entry:
tail call void @llvm.dbg.value(metadata ptr %object, metadata !21, metadata !DIExpression()), !dbg !27
tail call void @llvm.dbg.value(metadata ptr %start, metadata !22, metadata !DIExpression()), !dbg !28
@@ -17,7 +17,7 @@ entry:
; This debug value cannot safely be split into two 32-bit pieces.
; CHECK-NOT: DW_AT_name(offset)
tail call void @llvm.dbg.value(metadata i32 undef, metadata !23, metadata !DIExpression()), !dbg !31
br i1 undef, label %for.end, label %for.body.lr.ph, !dbg !31
br i1 %arg, label %for.end, label %for.body.lr.ph, !dbg !31
for.body.lr.ph: ; preds = %entry
%0 = load i64, ptr %start, align 4, !dbg !33

View File

@@ -27,10 +27,10 @@
declare dso_local i32 @get_mm_counter(ptr, i32) local_unnamed_addr #0
define dso_local i32 @dup_mm() local_unnamed_addr !dbg !16 {
define dso_local i32 @dup_mm(i1 %arg) local_unnamed_addr !dbg !16 {
entry:
%call = tail call i32 @kmem_cache_alloc(i32 0)
br i1 undef, label %cleanup, label %if.end
br i1 %arg, label %cleanup, label %if.end
if.end: ; preds = %entry
%tobool1.not = icmp eq i32 undef, 0

View File

@@ -36,13 +36,13 @@
%"class.llvm::Loop" = type opaque
%"struct.std::_Deque_iterator" = type { ptr, ptr, ptr, ptr }
define linkonce_odr void @_ZNSt5dequeIPN4llvm4LoopESaIS2_EE13_M_insert_auxESt15_Deque_iteratorIS2_RS2_PS2_EmRKS2_(ptr %this, ptr %__pos, i64 %__n) local_unnamed_addr align 2 !dbg !3 {
define linkonce_odr void @_ZNSt5dequeIPN4llvm4LoopESaIS2_EE13_M_insert_auxESt15_Deque_iteratorIS2_RS2_PS2_EmRKS2_(ptr %this, ptr %__pos, i64 %__n, i1 %arg) local_unnamed_addr align 2 !dbg !3 {
entry:
%0 = load ptr, ptr undef, align 8, !dbg !7
%_M_cur6.i = getelementptr inbounds %"class.std::deque", ptr %this, i64 0, i32 0, i32 0, i32 2, i32 0, !dbg !7
%1 = load ptr, ptr %_M_cur6.i, align 8, !dbg !7
%2 = load ptr, ptr undef, align 8, !dbg !7
br i1 undef, label %if.then.i851, label %if.end.i856, !dbg !7
br i1 %arg, label %if.then.i851, label %if.end.i856, !dbg !7
if.then.i851: ; preds = %entry
%.pre1038 = load ptr, ptr undef, align 8, !dbg !7
@@ -71,7 +71,7 @@
%sunkaddr3 = getelementptr inbounds i8, ptr %13, i64 40, !dbg !7
%14 = bitcast ptr %sunkaddr3 to ptr, !dbg !7
%15 = load ptr, ptr %14, align 8, !dbg !7
br i1 undef, label %if.then.i.i775, label %cond.true.i.i777, !dbg !7
br i1 %arg, label %if.then.i.i775, label %cond.true.i.i777, !dbg !7
if.then.i.i775: ; preds = %if.end.i856
%add.ptr.i.i774 = getelementptr inbounds ptr, ptr %11, i64 %__n, !dbg !7

View File

@@ -37,14 +37,14 @@
%class._Tree_unchecked_const_iterator = type { %struct._Iterator_base0, ptr }
%struct._Iterator_base0 = type { i32 }
define i32 @main({ i32, ptr } %call.i) !dbg !6 {
define i32 @main({ i32, ptr } %call.i, i1 %arg) !dbg !6 {
entry:
call void @llvm.dbg.value(metadata i32 2, metadata !10, metadata !DIExpression()), !dbg !12
%call.i1 = call { i32, ptr } undef(ptr null)
%0 = extractvalue { i32, ptr } %call.i, 1
call void @llvm.dbg.value(metadata ptr %0, metadata !13, metadata !DIExpression(DW_OP_LLVM_fragment, 64, 64)), !dbg !15
%call.i.i.i.i.i = call i8 undef(ptr null), !dbg !15
br i1 undef, label %_Z17do_insert_cv_testI5_TreeEvv.exit, label %if.then.i.i.i.i.i
br i1 %arg, label %_Z17do_insert_cv_testI5_TreeEvv.exit, label %if.then.i.i.i.i.i
if.then.i.i.i.i.i:
%call3.i.i.i.i.i = call ptr undef(ptr null)

View File

@@ -24,11 +24,11 @@
; Function Attrs: nounwind readnone speculatable
declare void @llvm.dbg.value(metadata, metadata, metadata) #0
define fastcc ptr @t(i32 %base) !dbg !3 {
define fastcc ptr @t(i32 %base, i1 %arg) !dbg !3 {
entry:
%0 = zext i32 %base to i64
%1 = getelementptr inbounds %struct.s2, ptr null, i64 %0
br i1 undef, label %bb1, label %bb2
br i1 %arg, label %bb1, label %bb2
bb1: ; preds = %entry
%2 = getelementptr inbounds %struct.s2, ptr null, i64 %0, i32 0
@@ -43,9 +43,9 @@
}
; This is a stub replicating bb structure of @t
define fastcc ptr @u(i32 %base) !dbg !33 {
define fastcc ptr @u(i32 %base, i1 %arg) !dbg !33 {
entry:
br i1 undef, label %bb1, label %bb2
br i1 %arg, label %bb1, label %bb2
bb1: ; preds = %entry
unreachable

View File

@@ -13,18 +13,18 @@ target triple = "x86_64-apple-darwin8"
@__clz_tab = external constant [256 x i8]
define hidden i128 @__divti3(i128 %u, i128 %v) nounwind readnone !dbg !9 {
define hidden i128 @__divti3(i128 %u, i128 %v, i1 %arg) nounwind readnone !dbg !9 {
entry:
tail call void @llvm.dbg.value(metadata i128 %u, metadata !14, metadata !DIExpression()), !dbg !15
tail call void @llvm.dbg.value(metadata i64 0, metadata !17, metadata !DIExpression()), !dbg !21
br i1 undef, label %bb2, label %bb4, !dbg !22
br i1 %arg, label %bb2, label %bb4, !dbg !22
bb2: ; preds = %entry
tail call void @llvm.dbg.value(metadata i128 %u, metadata !14, metadata !DIExpression()), !dbg !15
br label %bb4, !dbg !23
bb4: ; preds = %bb2, %entry
br i1 undef, label %__udivmodti4.exit, label %bb82.i, !dbg !24
br i1 %arg, label %__udivmodti4.exit, label %bb82.i, !dbg !24
bb82.i: ; preds = %bb4
unreachable

View File

@@ -10,52 +10,52 @@
%a = type { i32, i32 }
define hidden fastcc ptr @test() #1 !dbg !1 {
define hidden fastcc ptr @test(i1 %arg) #1 !dbg !1 {
entry:
%0 = icmp eq ptr undef, null, !dbg !12
br i1 %0, label %"14", label %return, !dbg !12
"14": ; preds = %"8"
br i1 undef, label %"25", label %"21", !dbg !12
br i1 %arg, label %"25", label %"21", !dbg !12
"21": ; preds = %"14"
br i1 undef, label %may_unswitch_on.exit, label %"6.i", !dbg !12
br i1 %arg, label %may_unswitch_on.exit, label %"6.i", !dbg !12
"6.i": ; preds = %"21"
br i1 undef, label %"10.i", label %may_unswitch_on.exit, !dbg !12
br i1 %arg, label %"10.i", label %may_unswitch_on.exit, !dbg !12
"10.i": ; preds = %"6.i"
br i1 undef, label %may_unswitch_on.exit, label %"12.i", !dbg !12
br i1 %arg, label %may_unswitch_on.exit, label %"12.i", !dbg !12
"12.i": ; preds = %"10.i"
br i1 undef, label %"4.i.i", label %"3.i.i", !dbg !12
br i1 %arg, label %"4.i.i", label %"3.i.i", !dbg !12
"3.i.i": ; preds = %"12.i"
br i1 undef, label %"4.i.i", label %VEC_edge_base_index.exit.i, !dbg !12
br i1 %arg, label %"4.i.i", label %VEC_edge_base_index.exit.i, !dbg !12
"4.i.i": ; preds = %"3.i.i", %"12.i"
unreachable, !dbg !12
VEC_edge_base_index.exit.i: ; preds = %"3.i.i"
br i1 undef, label %may_unswitch_on.exit, label %"16.i", !dbg !12
br i1 %arg, label %may_unswitch_on.exit, label %"16.i", !dbg !12
"16.i": ; preds = %VEC_edge_base_index.exit.i
br i1 undef, label %"4.i6.i", label %"3.i5.i", !dbg !12
br i1 %arg, label %"4.i6.i", label %"3.i5.i", !dbg !12
"3.i5.i": ; preds = %"16.i"
br i1 undef, label %VEC_edge_base_index.exit7.i, label %"4.i6.i", !dbg !12
br i1 %arg, label %VEC_edge_base_index.exit7.i, label %"4.i6.i", !dbg !12
"4.i6.i": ; preds = %"3.i5.i", %"16.i"
unreachable, !dbg !12
VEC_edge_base_index.exit7.i: ; preds = %"3.i5.i"
br i1 undef, label %may_unswitch_on.exit, label %"21.i", !dbg !12
br i1 %arg, label %may_unswitch_on.exit, label %"21.i", !dbg !12
"21.i": ; preds = %VEC_edge_base_index.exit7.i
br i1 undef, label %may_unswitch_on.exit, label %"23.i", !dbg !12
br i1 %arg, label %may_unswitch_on.exit, label %"23.i", !dbg !12
"23.i": ; preds = %"21.i"
br i1 undef, label %may_unswitch_on.exit, label %"26.i", !dbg !12
br i1 %arg, label %may_unswitch_on.exit, label %"26.i", !dbg !12
"26.i": ; preds = %"34.i", %"23.i"
%1 = icmp eq i32 undef, 9, !dbg !12
@@ -65,25 +65,25 @@ VEC_edge_base_index.exit7.i: ; preds = %"3.i5.i"
unreachable
"34.i": ; preds = %"26.i"
br i1 undef, label %"26.i", label %"36.i", !dbg !12
br i1 %arg, label %"26.i", label %"36.i", !dbg !12
"36.i": ; preds = %"34.i"
br i1 undef, label %"37.i", label %"38.i", !dbg !12
br i1 %arg, label %"37.i", label %"38.i", !dbg !12
"37.i": ; preds = %"36.i"
br label %"38.i", !dbg !12
"38.i": ; preds = %"37.i", %"36.i"
br i1 undef, label %"39.i", label %"45.i", !dbg !12
br i1 %arg, label %"39.i", label %"45.i", !dbg !12
"39.i": ; preds = %"38.i"
br i1 undef, label %"41.i", label %may_unswitch_on.exit, !dbg !12
br i1 %arg, label %"41.i", label %may_unswitch_on.exit, !dbg !12
"41.i": ; preds = %"39.i"
br i1 undef, label %may_unswitch_on.exit, label %"42.i", !dbg !12
br i1 %arg, label %may_unswitch_on.exit, label %"42.i", !dbg !12
"42.i": ; preds = %"41.i"
br i1 undef, label %may_unswitch_on.exit, label %"44.i", !dbg !12
br i1 %arg, label %may_unswitch_on.exit, label %"44.i", !dbg !12
"44.i": ; preds = %"42.i"
%2 = load ptr, ptr undef, align 8, !dbg !12

View File

@@ -9,9 +9,9 @@ target triple = "x86_64-apple-macosx10.8.0"
; CHECK: __Z3foov:
; CHECK: retq
define void @_Z3foov() !dbg !12 {
define void @_Z3foov(i1 %arg) !dbg !12 {
entry:
br i1 undef, label %exit, label %bb
br i1 %arg, label %exit, label %bb
bb: ; preds = %entry
call void @llvm.dbg.value(metadata ptr undef, metadata !15, metadata !16), !dbg !17

View File

@@ -8,13 +8,13 @@ declare void @llvm.dbg.value(metadata, metadata, metadata) nounwind readnone
define internal ptr @framework_construct_pathname(ptr %fname, ptr %dir) nounwind ssp !dbg !2 {
entry:
br i1 undef, label %bb33, label %bb
br i1 poison, label %bb33, label %bb
bb: ; preds = %entry
%tmp = icmp eq i32 undef, 0
%tmp1 = add i32 0, 11
call void @llvm.dbg.value(metadata i32 %tmp1, metadata !0, metadata !DIExpression()), !dbg !DILocation(scope: !1)
br i1 undef, label %bb18, label %bb31.preheader
br i1 poison, label %bb18, label %bb31.preheader
bb31.preheader: ; preds = %bb19, %bb
br label %bb31
@@ -30,7 +30,7 @@ bb19: ; preds = %bb18
bb22: ; preds = %bb31
%tmp4 = add i32 0, %tmp1
call void @foobar(i32 %tmp4)
br i1 undef, label %bb33, label %bb31
br i1 poison, label %bb33, label %bb31
bb31: ; preds = %bb22, %bb31.preheader
br i1 false, label %bb33, label %bb22

View File

@@ -8,9 +8,9 @@
source_filename = "<stdin>"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
define i32 @foo(ptr %bees, ptr %output) !dbg !4 {
define i32 @foo(ptr %bees, ptr %output, i1 %arg) !dbg !4 {
entry:
br i1 undef, label %bb1, label %bb1
br i1 %arg, label %bb1, label %bb1
bb1:
br label %bb3
bb2:
@@ -19,9 +19,9 @@
ret i32 0
}
define i32 @bar(ptr %bees, ptr %output) !dbg !40 {
define i32 @bar(ptr %bees, ptr %output, i1 %arg) !dbg !40 {
entry:
br i1 undef, label %bb1, label %bb1
br i1 %arg, label %bb1, label %bb1
bb1:
br label %bb3
bb2:
@@ -30,9 +30,9 @@
ret i32 0
}
define i32 @baz(ptr %bees, ptr %output) !dbg !80 {
define i32 @baz(ptr %bees, ptr %output, i1 %arg) !dbg !80 {
entry:
br i1 undef, label %bb1, label %bb1
br i1 %arg, label %bb1, label %bb1
bb1:
br label %bb3
bb2:
@@ -41,9 +41,9 @@
ret i32 0
}
define i32 @qux(ptr %bees, ptr %output) !dbg !120 {
define i32 @qux(ptr %bees, ptr %output, i1 %arg) !dbg !120 {
entry:
br i1 undef, label %bb1, label %bb1
br i1 %arg, label %bb1, label %bb1
bb1:
br label %bb3
bb2:

View File

@@ -4,11 +4,11 @@
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define dso_local x86_fp80 @powixf2() !dbg !1 {
define dso_local x86_fp80 @powixf2(i1 %arg) !dbg !1 {
entry:
%r = alloca x86_fp80, align 16
call void @llvm.dbg.declare(metadata ptr %r, metadata !14, metadata !DIExpression()), !dbg !15
br i1 undef, label %if.then, label %if.end, !dbg !16
br i1 %arg, label %if.then, label %if.end, !dbg !16
if.then: ; preds = %entry
; CHECK-LABEL: if.then:

View File

@@ -39,9 +39,9 @@ target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
target triple = "i686-w64-windows-gnu"
; Function Attrs: nounwind readnone
define dso_local i64 @nextafterl(i80 %a) local_unnamed_addr #0 !dbg !6 {
define dso_local i64 @nextafterl(i80 %a, i1 %arg) local_unnamed_addr #0 !dbg !6 {
entry:
br i1 undef, label %if.else, label %if.then13, !dbg !28
br i1 %arg, label %if.else, label %if.then13, !dbg !28
if.then13: ; preds = %entry
%u.sroa.0.8.insert.insert = or i80 %a, 2222, !dbg !29

View File

@@ -18,7 +18,7 @@ bb.2:
ret i32 3
}
define i32 @simp1() {
define i32 @simp1(i1 %arg) {
; CHECK-LABEL: @simp1(
; CHECK-NEXT: entry:
; CHECK-NEXT: ret i32 1
@@ -32,7 +32,7 @@ bb.1:
ret i32 2
bb.2:
br i1 undef, label %bb.1, label %bb.3
br i1 %arg, label %bb.1, label %bb.3
bb.3:
ret i32 3

View File

@@ -14,23 +14,23 @@
; CHECK: Running pass: NoOpLoopPass on loop %loop.1.0 in function f
; CHECK: Running pass: NoOpLoopPass on loop %loop.1 in function f
define void @f() {
define void @f(i1 %arg) {
entry:
br label %loop.0
loop.0:
br i1 undef, label %loop.0.0, label %loop.1
br i1 %arg, label %loop.0.0, label %loop.1
loop.0.0:
br i1 undef, label %loop.0.0, label %loop.0.1
br i1 %arg, label %loop.0.0, label %loop.0.1
loop.0.1:
br i1 undef, label %loop.0.1, label %loop.0
br i1 %arg, label %loop.0.1, label %loop.0
loop.1:
br i1 undef, label %loop.1, label %loop.1.bb1
br i1 %arg, label %loop.1, label %loop.1.bb1
loop.1.bb1:
br i1 undef, label %loop.1, label %loop.1.bb2
br i1 %arg, label %loop.1, label %loop.1.bb2
loop.1.bb2:
br i1 undef, label %end, label %loop.1.0
br i1 %arg, label %end, label %loop.1.0
loop.1.0:
br i1 undef, label %loop.1.0, label %loop.1
br i1 %arg, label %loop.1.0, label %loop.1
end:
ret void
}

View File

@@ -12,23 +12,23 @@
; CHECK: Running pass: NoOpLoopNestPass on loop %loop.1 in function f
; CHECK-NOT: Running pass: NoOpLoopNestPass on {{loop\..*\..*}}
define void @f() {
define void @f(i1 %arg) {
entry:
br label %loop.0
loop.0:
br i1 undef, label %loop.0.0, label %loop.1
br i1 %arg, label %loop.0.0, label %loop.1
loop.0.0:
br i1 undef, label %loop.0.0, label %loop.0.1
br i1 %arg, label %loop.0.0, label %loop.0.1
loop.0.1:
br i1 undef, label %loop.0.1, label %loop.0
br i1 %arg, label %loop.0.1, label %loop.0
loop.1:
br i1 undef, label %loop.1, label %loop.1.bb1
br i1 %arg, label %loop.1, label %loop.1.bb1
loop.1.bb1:
br i1 undef, label %loop.1, label %loop.1.bb2
br i1 %arg, label %loop.1, label %loop.1.bb2
loop.1.bb2:
br i1 undef, label %end, label %loop.1.0
br i1 %arg, label %end, label %loop.1.0
loop.1.0:
br i1 undef, label %loop.1.0, label %loop.1
br i1 %arg, label %loop.1.0, label %loop.1
end:
ret void
}

View File

@@ -101,23 +101,23 @@
declare i32 @g()
define void @f1() {
define void @f1(i1 %arg) {
entry:
br label %loop.0
loop.0:
br i1 undef, label %loop.0.0, label %loop.1
br i1 %arg, label %loop.0.0, label %loop.1
loop.0.0:
br i1 undef, label %loop.0.0, label %loop.0.1
br i1 %arg, label %loop.0.0, label %loop.0.1
loop.0.1:
br i1 undef, label %loop.0.1, label %loop.0
br i1 %arg, label %loop.0.1, label %loop.0
loop.1:
br i1 undef, label %loop.1, label %loop.1.bb1
br i1 %arg, label %loop.1, label %loop.1.bb1
loop.1.bb1:
br i1 undef, label %loop.1, label %loop.1.bb2
br i1 %arg, label %loop.1, label %loop.1.bb2
loop.1.bb2:
br i1 undef, label %end, label %loop.1.0
br i1 %arg, label %end, label %loop.1.0
loop.1.0:
br i1 undef, label %loop.1.0, label %loop.1
br i1 %arg, label %loop.1.0, label %loop.1
end:
ret void
}
@@ -141,14 +141,14 @@ bb.false:
; This function is here to verify that opt-bisect can skip all passes for
; functions that contain lifetime intrinsics.
define void @f4() {
define void @f4(i1 %arg) {
entry:
%i = alloca i32, align 4
call void @llvm.lifetime.start(i64 4, ptr %i)
br label %for.cond
for.cond:
br i1 undef, label %for.body, label %for.end
br i1 %arg, label %for.body, label %for.end
for.body:
br label %for.cond

View File

@@ -3,11 +3,11 @@
; In %merge %val.unrelocated, %ptr and %arg should be unrelocated.
; FIXME: if this test fails it is a false-positive alarm. IR is correct.
define void @test.unrelocated-phi.ok(ptr addrspace(1) %arg) gc "statepoint-example" {
define void @test.unrelocated-phi.ok(ptr addrspace(1) %arg, i1 %new_arg) gc "statepoint-example" {
; CHECK-LABEL: Verifying gc pointers in function: test.unrelocated-phi.ok
bci_0:
%ptr = getelementptr i8, ptr addrspace(1) %arg, i64 4
br i1 undef, label %left, label %right
br i1 %new_arg, label %left, label %right
left:
%safepoint_token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr undef, i32 0, i32 0, i32 0, i32 5, i32 0, i32 -1, i32 0, i32 0, i32 0)

View File

@@ -14,7 +14,7 @@ declare ptr addrspace(1) @generate_obj2() #1
declare ptr addrspace(1) @generate_obj3() #1
; Function Attrs: nounwind
define void @test(ptr addrspace(1), ptr addrspace(1), i32) #3 gc "statepoint-example" {
define void @test(ptr addrspace(1), ptr addrspace(1), i32, i1 %new_arg) #3 gc "statepoint-example" {
bci_0:
%result608 = call ptr addrspace(1) @generate_obj3()
br label %bci_37-aload
@@ -24,7 +24,7 @@ bci_37-aload: ; preds = %not_zero179, %bci_0
%base_phi2 = phi ptr addrspace(1) [ %base_phi3, %not_zero179 ], [ %result608, %bci_0 ], !is_base_value !0
%relocated8 = phi ptr addrspace(1) [ %relocated7.relocated, %not_zero179 ], [ %result608, %bci_0 ]
%tmp3 = getelementptr inbounds %jObject, ptr addrspace(1) %relocated8, i64 0, i32 0, i64 32
br i1 undef, label %not_zero179, label %not_zero146
br i1 %new_arg, label %not_zero179, label %not_zero146
not_zero146: ; preds = %bci_37-aload
%addr98.relocated = call ptr addrspace(1) @generate_obj2() #1

View File

@@ -1,9 +1,9 @@
; RUN: opt -safepoint-ir-verifier-print-only -verify-safepoint-ir -S %s 2>&1 | FileCheck %s
define ptr addrspace(1) @test.not.ok.0(ptr addrspace(1) %arg) gc "statepoint-example" {
define ptr addrspace(1) @test.not.ok.0(ptr addrspace(1) %arg, i1 %new_arg) gc "statepoint-example" {
; CHECK-LABEL: Verifying gc pointers in function: test.not.ok.0
bci_0:
br i1 undef, label %left, label %right
br i1 %new_arg, label %left, label %right
left:
%safepoint_token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) undef, i32 0, i32 0, i32 0, i32 0)
@@ -20,10 +20,10 @@ define ptr addrspace(1) @test.not.ok.0(ptr addrspace(1) %arg) gc "statepoint-exa
ret ptr addrspace(1) %val
}
define ptr addrspace(1) @test.not.ok.1(ptr addrspace(1) %arg) gc "statepoint-example" {
define ptr addrspace(1) @test.not.ok.1(ptr addrspace(1) %arg, i1 %new_arg) gc "statepoint-example" {
; CHECK-LABEL: Verifying gc pointers in function: test.not.ok.1
bci_0:
br i1 undef, label %left, label %right
br i1 %new_arg, label %left, label %right
left:
%safepoint_token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) undef, i32 0, i32 0, i32 0, i32 0)
@@ -40,10 +40,10 @@ define ptr addrspace(1) @test.not.ok.1(ptr addrspace(1) %arg) gc "statepoint-exa
ret ptr addrspace(1) %val
}
define ptr addrspace(1) @test.ok.0(ptr addrspace(1) %arg) gc "statepoint-example" {
define ptr addrspace(1) @test.ok.0(ptr addrspace(1) %arg, i1 %new_arg) gc "statepoint-example" {
; CHECK: No illegal uses found by SafepointIRVerifier in: test.ok.0
bci_0:
br i1 undef, label %left, label %right
br i1 %new_arg, label %left, label %right
left:
%safepoint_token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) undef, i32 0, i32 0, i32 0, i32 0)
@@ -57,10 +57,10 @@ define ptr addrspace(1) @test.ok.0(ptr addrspace(1) %arg) gc "statepoint-example
ret ptr addrspace(1) %val
}
define ptr addrspace(1) @test.ok.1(ptr addrspace(1) %arg) gc "statepoint-example" {
define ptr addrspace(1) @test.ok.1(ptr addrspace(1) %arg, i1 %new_arg) gc "statepoint-example" {
; CHECK: No illegal uses found by SafepointIRVerifier in: test.ok.1
bci_0:
br i1 undef, label %left, label %right
br i1 %new_arg, label %left, label %right
left:
call void @not_statepoint()
@@ -75,10 +75,10 @@ define ptr addrspace(1) @test.ok.1(ptr addrspace(1) %arg) gc "statepoint-example
}
; It should be allowed to compare poisoned ptr with null.
define void @test.poisoned.cmp.ok(ptr addrspace(1) %arg) gc "statepoint-example" {
define void @test.poisoned.cmp.ok(ptr addrspace(1) %arg, i1 %new_arg) gc "statepoint-example" {
; CHECK-LABEL: Verifying gc pointers in function: test.poisoned.cmp.ok
bci_0:
br i1 undef, label %left, label %right
br i1 %new_arg, label %left, label %right
left:
%safepoint_token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) undef, i32 0, i32 0, i32 0, i32 0) ["gc-live"(ptr addrspace(1) %arg)]
@@ -97,10 +97,10 @@ define void @test.poisoned.cmp.ok(ptr addrspace(1) %arg) gc "statepoint-example"
}
; It is illegal to compare poisoned ptr and relocated.
define void @test.poisoned.cmp.fail.0(ptr addrspace(1) %arg) gc "statepoint-example" {
define void @test.poisoned.cmp.fail.0(ptr addrspace(1) %arg, i1 %new_arg) gc "statepoint-example" {
; CHECK-LABEL: Verifying gc pointers in function: test.poisoned.cmp.fail.0
bci_0:
br i1 undef, label %left, label %right
br i1 %new_arg, label %left, label %right
left:
%safepoint_token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) undef, i32 0, i32 0, i32 0, i32 0) ["gc-live"(ptr addrspace(1) %arg)]
@@ -123,10 +123,10 @@ define void @test.poisoned.cmp.fail.0(ptr addrspace(1) %arg) gc "statepoint-exam
}
; It is illegal to compare poisoned ptr and unrelocated.
define void @test.poisoned.cmp.fail.1(ptr addrspace(1) %arg) gc "statepoint-example" {
define void @test.poisoned.cmp.fail.1(ptr addrspace(1) %arg, i1 %new_arg) gc "statepoint-example" {
; CHECK-LABEL: Verifying gc pointers in function: test.poisoned.cmp.fail.1
bci_0:
br i1 undef, label %left, label %right
br i1 %new_arg, label %left, label %right
left:
%safepoint_token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) undef, i32 0, i32 0, i32 0, i32 0) ["gc-live"(ptr addrspace(1) %arg)]
@@ -148,10 +148,10 @@ define void @test.poisoned.cmp.fail.1(ptr addrspace(1) %arg) gc "statepoint-exam
}
; It should be allowed to compare unrelocated phi with unrelocated value.
define void @test.unrelocated-phi.cmp.ok(ptr addrspace(1) %arg) gc "statepoint-example" {
define void @test.unrelocated-phi.cmp.ok(ptr addrspace(1) %arg, i1 %new_arg) gc "statepoint-example" {
; CHECK-LABEL: Verifying gc pointers in function: test.unrelocated-phi.cmp.ok
bci_0:
br i1 undef, label %left, label %right
br i1 %new_arg, label %left, label %right
left:
%safepoint_token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) undef, i32 0, i32 0, i32 0, i32 0)

View File

@@ -1,13 +1,13 @@
; RUN: not llvm-as -disable-output < %s 2>&1 | FileCheck %s
; CHECK: Access type node must be a valid scalar type
define void @test6(ptr %gi) #0 {
define void @test6(ptr %gi, i1 %arg) #0 {
entry:
store i32 42, ptr %gi, align 4, !tbaa !0
br label %for.cond
for.cond: ; preds = %for.body, %entry
br i1 undef, label %for.body, label %for.end
br i1 %arg, label %for.body, label %for.end
for.body: ; preds = %for.cond
store i32 undef, ptr %gi, align 4, !tbaa !2

View File

@@ -27,10 +27,10 @@
@Global = global i32 42
define void @func(ptr %arg1, ptr %arg2) {
define void @func(ptr %arg1, ptr %arg2, i1 %arg) {
entry:
%val = getelementptr i32, ptr getelementptr (i32, ptr @Global, i32 1), i32 2
br i1 undef, label %branch, label %loop
br i1 %arg, label %branch, label %loop
branch:
%nondominating1 = getelementptr i32, ptr %val, i32 3
@@ -50,7 +50,7 @@ loop:
store i32 49, ptr %imm, align 4 ; Reduce to null
%nondominating2 = getelementptr i32, ptr %indirect, i32 6
br i1 undef, label %loop, label %exit
br i1 %arg, label %loop, label %exit
exit:
store i32 50, ptr %arg2, align 4 ; Reduce to %arg1 (compactify function arguments)