forked from OSchip/llvm-project
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. llvm-svn: 185688
This commit is contained in:
parent
0e90c3d92c
commit
606f3fbc2b
|
@ -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