mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
[CGP] Fix the handling select inst in complex addressing mode
When we put the value in select placeholder we must pass the value through simplification tracker due to the value might be already simplified and erased. This is a fix for PR35658. Reviewers: john.brawn, uabelho Reviewed By: john.brawn Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D41251 llvm-svn: 320956
This commit is contained in:
parent
2b28c31ebe
commit
fb3e2e6057
@ -2988,13 +2988,13 @@ private:
|
||||
? CurrentBlock
|
||||
: nullptr };
|
||||
assert(Map.find(TrueItem) != Map.end() && "No True Value!");
|
||||
Select->setTrueValue(Map[TrueItem]);
|
||||
Select->setTrueValue(ST.Get(Map[TrueItem]));
|
||||
auto *FalseValue = CurrentSelect->getFalseValue();
|
||||
ValueInBB FalseItem = { FalseValue, isa<Instruction>(FalseValue)
|
||||
? CurrentBlock
|
||||
: nullptr };
|
||||
assert(Map.find(FalseItem) != Map.end() && "No False Value!");
|
||||
Select->setFalseValue(Map[FalseItem]);
|
||||
Select->setFalseValue(ST.Get(Map[FalseItem]));
|
||||
} else {
|
||||
// Must be a Phi node then.
|
||||
PHINode *PHI = cast<PHINode>(V);
|
||||
|
21
test/Transforms/CodeGenPrepare/X86/pr35658.ll
Normal file
21
test/Transforms/CodeGenPrepare/X86/pr35658.ll
Normal file
@ -0,0 +1,21 @@
|
||||
; RUN: opt -S -codegenprepare -disable-complex-addr-modes=false -addr-sink-new-phis=true -addr-sink-new-select=true %s | FileCheck %s
|
||||
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 void @f2() {
|
||||
entry:
|
||||
%arraydecay = getelementptr inbounds [2 x i16], [2 x i16]* undef, i16 0, i16 0
|
||||
%arrayidx1 = getelementptr inbounds [2 x i16], [2 x i16]* undef, i16 0, i16 1
|
||||
br label %for.body
|
||||
|
||||
for.body: ; preds = %for.body, %entry
|
||||
%e.03 = phi i16* [ %arraydecay, %entry ], [ %arrayidx1, %for.body ]
|
||||
%tobool = icmp eq i16 undef, 0
|
||||
br i1 undef, label %for.body, label %for.end
|
||||
|
||||
for.end: ; preds = %for.body
|
||||
; CHECK: sunkaddr
|
||||
%e.1.le = select i1 %tobool, i16* %arrayidx1, i16* %e.03
|
||||
store i16 0, i16* %e.1.le, align 1
|
||||
ret void
|
||||
}
|
Loading…
Reference in New Issue
Block a user