Index: llvm/trunk/lib/Target/Sparc/SparcISelDAGToDAG.cpp =================================================================== --- llvm/trunk/lib/Target/Sparc/SparcISelDAGToDAG.cpp +++ llvm/trunk/lib/Target/Sparc/SparcISelDAGToDAG.cpp @@ -311,6 +311,8 @@ if (!Changed) return false; + SelectInlineAsmMemoryOperands(AsmNodeOperands, SDLoc(N)); + SDValue New = CurDAG->getNode(ISD::INLINEASM, SDLoc(N), CurDAG->getVTList(MVT::Other, MVT::Glue), AsmNodeOperands); New->setNodeId(-1); Index: llvm/trunk/test/CodeGen/SPARC/inlineasm.ll =================================================================== --- llvm/trunk/test/CodeGen/SPARC/inlineasm.ll +++ llvm/trunk/test/CodeGen/SPARC/inlineasm.ll @@ -112,3 +112,11 @@ %2 = tail call double asm sideeffect "faddd $1, $2, $0;", "=f,f,e"(double %0, double %1) #7 ret double %2 } + +; CHECK-LABEL: test_addressing_mode_i64: +; CHECK: std %l0, [%o0] +define void @test_addressing_mode_i64(i64* %out) { +entry: + call void asm "std %l0, $0", "=*m,r"(i64* nonnull %out, i64 0) + ret void +}