mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
[CodeGenPrepare] Use APInt to check the value of the immediate in a and
while checking candidate for bit field extract. Otherwise the value may not fit in uint64_t and this will trigger an assertion. This fixes PR19503. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206834 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
bb67355af8
commit
8959c39450
@ -639,9 +639,9 @@ bool isExtractBitsCandidateUse(Instruction *User) {
|
|||||||
!isa<ConstantInt>(User->getOperand(1)))
|
!isa<ConstantInt>(User->getOperand(1)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
unsigned Cimm = dyn_cast<ConstantInt>(User->getOperand(1))->getZExtValue();
|
const APInt &Cimm = cast<ConstantInt>(User->getOperand(1))->getValue();
|
||||||
|
|
||||||
if (Cimm & (Cimm + 1))
|
if ((Cimm & (Cimm + 1)).getBoolValue())
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -477,3 +477,26 @@ return: ; preds = %if.end13, %if.then1
|
|||||||
%retval.0 = phi i32 [ %conv, %if.then ], [ %add, %if.then7 ], [ %add23, %if.then17 ], [ 64, %if.end13 ]
|
%retval.0 = phi i32 [ %conv, %if.then ], [ %add, %if.then7 ], [ %add23, %if.then17 ], [ 64, %if.end13 ]
|
||||||
ret i32 %retval.0
|
ret i32 %retval.0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; Make sure we do not assert if the immediate in and is bigger than i64.
|
||||||
|
; PR19503.
|
||||||
|
; OPT-LABEL: @fct20
|
||||||
|
; OPT: lshr
|
||||||
|
; OPT-NOT: lshr
|
||||||
|
; OPT: ret
|
||||||
|
; CHECK-LABEL: fct20:
|
||||||
|
; CHECK: ret
|
||||||
|
define i80 @fct20(i128 %a, i128 %b) {
|
||||||
|
entry:
|
||||||
|
%shr = lshr i128 %a, 18
|
||||||
|
%conv = trunc i128 %shr to i80
|
||||||
|
%tobool = icmp eq i128 %b, 0
|
||||||
|
br i1 %tobool, label %then, label %end
|
||||||
|
then:
|
||||||
|
%and = and i128 %shr, 483673642326615442599424
|
||||||
|
%conv2 = trunc i128 %and to i80
|
||||||
|
br label %end
|
||||||
|
end:
|
||||||
|
%conv3 = phi i80 [%conv, %entry], [%conv2, %then]
|
||||||
|
ret i80 %conv3
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user