mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-13 10:32:06 +00:00
Fix a miscompilation of:
long long foo(long long X) { return (long long)(signed char)(int)X; } Instead of: _foo: extsb r2, r4 srawi r3, r4, 31 mr r4, r2 blr we now produce: _foo: extsb r4, r4 srawi r3, r4, 31 blr This fixes a miscompilation in ConstantFolding.cpp. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30768 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
af1dabef35
commit
4bdd2753db
@ -4349,12 +4349,14 @@ void SelectionDAGLegalize::ExpandOp(SDOperand Op, SDOperand &Lo, SDOperand &Hi){
|
||||
|
||||
case ISD::SIGN_EXTEND_INREG:
|
||||
ExpandOp(Node->getOperand(0), Lo, Hi);
|
||||
// Sign extend the lo-part.
|
||||
// sext_inreg the low part if needed.
|
||||
Lo = DAG.getNode(ISD::SIGN_EXTEND_INREG, NVT, Lo, Node->getOperand(1));
|
||||
|
||||
// The high part gets the sign extension from the lo-part. This handles
|
||||
// things like sextinreg V:i64 from i8.
|
||||
Hi = DAG.getNode(ISD::SRA, NVT, Lo,
|
||||
DAG.getConstant(MVT::getSizeInBits(NVT)-1,
|
||||
TLI.getShiftAmountTy()));
|
||||
// sext_inreg the low part if needed.
|
||||
Lo = DAG.getNode(ISD::SIGN_EXTEND_INREG, NVT, Lo, Node->getOperand(1));
|
||||
break;
|
||||
|
||||
case ISD::BSWAP: {
|
||||
|
Loading…
x
Reference in New Issue
Block a user