mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-04 21:31:03 +00:00
PR14904: Segmentation fault running pass 'Recognize loop idioms'
The root cause is mistakenly taking for granted that "dyn_cast<Instruction>(a-Value)" return a non-NULL instruction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172145 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
582e4f278b
commit
253449db20
@ -407,7 +407,7 @@ bool NclPopcountRecognize::detectIdiom(Instruction *&CntInst,
|
|||||||
|
|
||||||
// step 2: detect instructions corresponding to "x2 = x1 & (x1 - 1)"
|
// step 2: detect instructions corresponding to "x2 = x1 & (x1 - 1)"
|
||||||
{
|
{
|
||||||
if (DefX2->getOpcode() != Instruction::And)
|
if (!DefX2 || DefX2->getOpcode() != Instruction::And)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
BinaryOperator *SubOneOp;
|
BinaryOperator *SubOneOp;
|
||||||
|
@ -118,3 +118,23 @@ while.end: ; preds = %while.body, %entry
|
|||||||
%c.0.lcssa = phi i32 [ 0, %entry ], [ %inc, %while.body ]
|
%c.0.lcssa = phi i32 [ 0, %entry ], [ %inc, %while.body ]
|
||||||
ret i32 %c.0.lcssa
|
ret i32 %c.0.lcssa
|
||||||
}
|
}
|
||||||
|
|
||||||
|
define i32 @PopCntCrash3(i64 %a, i32 %x) {
|
||||||
|
entry:
|
||||||
|
%tobool3 = icmp eq i64 %a, 0
|
||||||
|
%cmp = icmp eq i32 %x, 0
|
||||||
|
br i1 %tobool3, label %while.end, label %while.body
|
||||||
|
|
||||||
|
while.body: ; preds = %entry, %while.body
|
||||||
|
%c.05 = phi i32 [ %inc, %while.body ], [ 0, %entry ]
|
||||||
|
%a.addr.04 = phi i64 [ %and, %while.body ], [ %a, %entry ]
|
||||||
|
%inc = add nsw i32 %c.05, 1
|
||||||
|
%sub = add i64 %a.addr.04, -1
|
||||||
|
%and = and i64 %sub, %a.addr.04
|
||||||
|
%tobool = icmp eq i64 %and, 0
|
||||||
|
br i1 %cmp, label %while.end, label %while.body
|
||||||
|
|
||||||
|
while.end: ; preds = %while.body, %entry
|
||||||
|
%c.0.lcssa = phi i32 [ 0, %entry ], [ %inc, %while.body ]
|
||||||
|
ret i32 %c.0.lcssa
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user