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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 ]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 ]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 ]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user