OSDN Git Service

Revert "[ARM] Skip inline asm memory operands in DAGToDAGISel"
authorVitaly Buka <vitalybuka@google.com>
Mon, 18 Jul 2016 19:44:01 +0000 (19:44 +0000)
committerVitaly Buka <vitalybuka@google.com>
Mon, 18 Jul 2016 19:44:01 +0000 (19:44 +0000)
Breaks asan, see https://reviews.llvm.org/D22103

This reverts commit r275776.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275890 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMISelDAGToDAG.cpp
test/CodeGen/ARM/inlineasm3.ll

index 20db3d3..c5e1d97 100644 (file)
@@ -4264,17 +4264,6 @@ bool ARMDAGToDAGISel::tryInlineAsm(SDNode *N){
     if (Changed && InlineAsm::isUseOperandTiedToDef(Flag, DefIdx))
       IsTiedToChangedOp = OpChanged[DefIdx];
 
-    // Memory operands to inline asm in the SelectionDAG are modeled with two
-    // operands: a constant of value InlineAsm::Kind_Mem followed by the input
-    // operand. If we get here and we have a Kind_Mem, skip the next operand (so
-    // it doesn't get misinterpreted), and continue. We do this here because
-    // it's important to update the OpChanged array correctly before moving on.
-    if (Kind == InlineAsm::Kind_Mem) {
-      SDValue op = N->getOperand(++i);
-      AsmNodeOperands.push_back(op);
-      continue;
-    }
-
     if (Kind != InlineAsm::Kind_RegUse && Kind != InlineAsm::Kind_RegDef
         && Kind != InlineAsm::Kind_RegDefEarlyClobber)
       continue;
index 59706c4..eb7ba59 100644 (file)
@@ -121,14 +121,3 @@ entry:
   %0 = tail call <4 x i32> asm "vld1.s32 {${0:e}[], ${0:f}[]}, [$1]", "=w,r"(i32* %p) nounwind
   ret <4 x i32> %0
 }
-
-; Bugzilla PR26038
-
-define i32 @fn1() local_unnamed_addr nounwind {
-; CHECK-LABEL: fn1
-entry:
-; CHECK: mov [[addr:r[0-9]+]], #5
-; CHECK: ldrh {{.*}}[[addr]]
-  %0 = tail call i32 asm "ldrh  $0, $1", "=r,*Q"(i8* inttoptr (i32 5 to i8*)) nounwind
-  ret i32 %0
-}