[llvm-commits] [llvm-gcc-4.2] r104726 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
Bob Wilson
bob.wilson at apple.com
Wed May 26 12:52:55 PDT 2010
Author: bwilson
Date: Wed May 26 14:52:55 2010
New Revision: 104726
URL: http://llvm.org/viewvc/llvm-project?rev=104726&view=rev
Log:
Set the sideeffect flag on an inline asm when replacing an output constraint
for a register variable with the specific register to which that variable has
been pinned. Otherwise, the asm may appear to be unused and may be removed
as dead code. Testcase to follow. Radar 8026855.
Modified:
llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=104726&r1=104725&r2=104726&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Wed May 26 14:52:55 2010
@@ -4670,6 +4670,7 @@
std::vector<const Type*> CallArgTypes;
std::string NewAsmStr = ConvertInlineAsmStr(exp, NumOutputs+NumInputs);
std::string ConstraintStr;
+ bool HasSideEffects = ASM_VOLATILE_P(exp) || !ASM_OUTPUTS(exp);
// StoreCallResultAddr - The pointer to store the result of the call through.
SmallVector<Value *, 4> StoreCallResultAddrs;
@@ -4718,6 +4719,8 @@
NewConstraint[RegNameLen+2] = '}';
NewConstraint[RegNameLen+3] = 0;
SimplifiedConstraint = NewConstraint;
+ // This output will now be implicit; set the sideffect flag on the asm.
+ HasSideEffects = true;
// We should no longer consider mem constraints.
AllowsMem = false;
} else {
@@ -4952,8 +4955,7 @@
}
Value *Asm = InlineAsm::get(FTy, NewAsmStr, ConstraintStr,
- ASM_VOLATILE_P(exp) || !ASM_OUTPUTS(exp),
- ASM_ASM_BLOCK(exp));
+ HasSideEffects, ASM_ASM_BLOCK(exp));
CallInst *CV = Builder.CreateCall(Asm, CallOps.begin(), CallOps.end(),
CallResultTypes.empty() ? "" : "asmtmp");
CV->setDoesNotThrow();
More information about the llvm-commits
mailing list