Skip to content
This repository was archived by the owner on Feb 5, 2019. It is now read-only.

Commit fcaf5fa

Browse files
committed
Do not pass an invalid domtree to SimplifyInstruction from
LoopUnswitch. Fixes PR12887. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157140 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent a991ea5 commit fcaf5fa

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

lib/Transforms/Scalar/LoopUnswitch.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1214,8 +1214,8 @@ void LoopUnswitch::SimplifyCode(std::vector<Instruction*> &Worklist, Loop *L) {
12141214

12151215
// See if instruction simplification can hack this up. This is common for
12161216
// things like "select false, X, Y" after unswitching made the condition be
1217-
// 'false'.
1218-
if (Value *V = SimplifyInstruction(I, 0, 0, DT))
1217+
// 'false'. TODO: update the domtree properly so we can pass it here.
1218+
if (Value *V = SimplifyInstruction(I))
12191219
if (LI->replacementPreservesLCSSAForm(I, V)) {
12201220
ReplaceUsesOfWith(I, V, Worklist, L, LPM);
12211221
continue;
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
; RUN: opt < %s -loop-unswitch -disable-output
2+
; PR12887
3+
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-S128"
4+
target triple = "x86_64-unknown-linux-gnu"
5+
6+
@a = common global i32 0, align 4
7+
@c = common global i32 0, align 4
8+
@b = common global i32 0, align 4
9+
10+
define void @func() noreturn nounwind uwtable {
11+
entry:
12+
%0 = load i32* @a, align 4
13+
%tobool = icmp eq i32 %0, 0
14+
%1 = load i32* @b, align 4
15+
br label %while.body
16+
17+
while.body: ; preds = %while.body, %entry
18+
%d.0 = phi i8 [ undef, %entry ], [ %conv2, %while.body ]
19+
%conv = sext i8 %d.0 to i32
20+
%cond = select i1 %tobool, i32 0, i32 %conv
21+
%conv11 = zext i8 %d.0 to i32
22+
%add = add i32 %1, %conv11
23+
%conv2 = trunc i32 %add to i8
24+
br label %while.body
25+
}

0 commit comments

Comments
 (0)