mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-30 17:33:24 +00:00
PR16490: fix a crash in ARMDAGToDAGISel::SelectInlineAsm.
In the SelectionDAG immediate operands to inline asm are constructed as two separate operands. The first is a constant of value InlineAsm::Kind_Imm and the second is a constant with the value of the immediate. In ARMDAGToDAGISel::SelectInlineAsm, if we reach an operand of Kind_Imm we should skip over the next operand too. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185688 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
24663f69cc
commit
00d9fe2de7
@ -3491,6 +3491,12 @@ SDNode *ARMDAGToDAGISel::SelectInlineAsm(SDNode *N){
|
||||
else
|
||||
continue;
|
||||
|
||||
if (Kind == InlineAsm::Kind_Imm) {
|
||||
SDValue op = N->getOperand(++i);
|
||||
AsmNodeOperands.push_back(op);
|
||||
continue;
|
||||
}
|
||||
|
||||
unsigned NumRegs = InlineAsm::getNumOperandRegisters(Flag);
|
||||
if (NumRegs)
|
||||
OpChanged.push_back(false);
|
||||
|
@ -65,3 +65,8 @@ entry:
|
||||
%0 = tail call i64 asm sideeffect "ldrexd $0, ${0:H}, [$1]", "=&r,r,*Qo"(i64* %val, i64* %val) nounwind
|
||||
ret i64 %0
|
||||
}
|
||||
|
||||
define void @f5(i64 %__pu_val) {
|
||||
call void asm sideeffect "$1", "r,i"(i64 %__pu_val, i32 -14)
|
||||
ret void
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user