aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaStmtAsm.cpp
AgeCommit message (Collapse)Author
2012-09-21[ms-inline asm] Use mnemonicIsValid() in a helpful assert.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164421 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-13Add a few FIXMEs.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163758 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-13[ms-inline asm] Handle the enumeration of input and output expressions in aChad Rosier
more robust way to address a few FIXMEs. The initial implementation, r163342, built the IR asm string and then tried to patch things on the fly without enough context. Specifically, it didn't skip mnemonics nor did it track with assembly instruction an expression was related to. The new implementation patches the operands and then builds the final IR string. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163756 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-12[ms-inline asm] If we have a single asm operand that maps to multipleChad Rosier
MCOperands then iterate over all of then when computing clobbers, inputs and outputs. On x86 the 1-to-many mapping is a memory operand that includes a BaseReg(reg), MemScale(imm), MemIndexReg(reg), an Expr(MCExpr or imm) and a MemSegReg(reg). Invalid register (Op.getReg() == 0) are not considered when computing clobber. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163728 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-11[ms-inline asm] isDef/NumDefs in this context only refer to register ↵Chad Rosier
definitions, not memory definitions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163666 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-11[ms-inline asm] As of r163657 this check is unnecessary.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163665 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-11[ms-inline asm] Don't consider tokens or immediates when computing clobbers, ↵Chad Rosier
inputs and outputs. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163657 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-11[ms-inline asm] Add $$ before numeric constants in the IR.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163581 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06[ms-inline asm] Output empty asm statements for the directives we don'tChad Rosier
handle. Otherwise, the AsmParser will explode if we try to generate an object files. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163345 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06[ms-inline asm] The IR representation of inline assembly enumerates the inputChad Rosier
and output expressions much like that in GNU-style inline assembly. Output expressions are first. Do this for MS-style inline asms. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163342 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-05Update for r163187.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163188 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-04[ms-inline asm] The MCInstrDesc only tracks register definitions. For now,Chad Rosier
assume that if the 1st operands is an expression and the instruction mayStore, then it is a memory definition. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163144 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-04Fix 80-column violation.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163142 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-03[ms-inline asm] Use the new GetMCInstOperandNum() interface in the front-end.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163126 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-03Removed unused argument.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163105 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-03[ms-inline asm] Update for the MatchInstruction API change in r163101.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163102 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-28Revert r162424 now that the scoping issue has been fixed in r162444.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162797 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-28Tidy up.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162786 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-28[ms-inline asm] Add constraints to MSAsmStmt. We don't currently computeChad Rosier
the constraints, so in the interim we speculatively assume a 'r' constraint. This is expected to work for most cases on x86. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162784 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-25[ms-inline asm] As part of a larger refactoring, rename AsmStmt to GCCAsmStmt.Chad Rosier
No functional change intended. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162632 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-24[ms-inline asm] Change the -fenable-experimental-ms-inline-asm option from a Chad Rosier
CodeGen option to a LangOpt option. In turn, hoist the guard into the parser so that we avoid the new (and fairly unstable) Sema/AST/CodeGen logic. This should restore the behavior of clang to that prior to r158325. <rdar://problem/12163681> git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162602 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-24Remove unnecessary calls to c_str.Benjamin Kramer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162590 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-24[ms-inline asm] Generate the Input/Output expressions using Chad Rosier
Sema::ActOnIdExpression(). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162564 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-24Fix 80-column violation.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162560 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-24[ms-inline asm] Add the basic APIs for Exprs to the MSAsmStmt AST. Next we needChad Rosier
generate the Input/Output expressions using Sema::ActOnIdExpression(). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162509 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-23Now that ASTMultiPtr is nothing more than a array reference, make it a ↵Benjamin Kramer
MutableArrayRef. This required changing all get() calls to data() and using the simpler constructors. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162501 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-23[ms-inline asm] Rename a few induction variables to avoid confusion and silenceChad Rosier
a gcc warning. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162444 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-23Don't recycle loop variables (to keep GCC happy).Matt Beaumont-Gay
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162424 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-23Fix 80-column violation.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162416 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-22[ms-inline asm] Compute the inputs and outputs. No test case (yet) as thisChad Rosier
requires codegen support. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162410 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-22[ms-inline asm] Refactor code so that we can begin computing the Inputs/Outputs.Chad Rosier
No functional change intended. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162403 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-22[ms-inline asm] Add comments.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162396 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-22[ms-inline asm] Add comments.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162394 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-22[ms-inline asm] Add helper function. No functional change intended.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162393 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-22[ms-inline asm] Simplify logic. No functional change intended.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162392 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-22[ms-inline asm] Compute the token range for each instruction within the asm.Chad Rosier
Eventually, we'll need a way of mapping tokens (and their IdentifierInfo*) to the operands computed by buildMSAsmPieces(). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162388 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-22[ms-inline asm] Simplify logic. No functional change intended.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162385 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-22[ms-inline asm] Start sending non-simple inline asms to the AsmParser.Chad Rosier
The parser still can't handle all cases, so fall back to emitting a simple MSAsmStmt if we get into trouble. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162382 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-21[ms-inline asm] Remove the patchMSAsmStrings function. After some discussionChad Rosier
between Bob, Jim, Eric and I, we've decided to take a slightly different approach. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162327 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-21[ms-inline asm] Have buildMSAsmString build a vector of unmodified AsmStrings.Chad Rosier
Add a new static function, buildMSAsmPieces, that will break these strings down into mnemonic and operands. Upon a match failure, the idea is to use the ErrorInfo from MatchInstructionImpl to inspect the mnemonic/operand and decide a course of action. Unfortunately, there's no easy way to test this at the moment. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162321 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-21[ms-inline asm] Do not report a Parser error when matching inline assembly.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162307 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-21[ms-inline asm] Expose the ErrorInfo from the MatchInstructionImpl. In general,Chad Rosier
this is the index of the operand that failed to match. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162296 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-21[ms-inline asm] Append identifier for better debugging.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162289 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-21[ms-inline asm] Remove this test case and the associated special case code.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162288 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-20[ms-inline asm] Remove old cruft now that MS-style asms their own code path.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162210 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-17[ms-inline asm] Update comment.Chad Rosier
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162134 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-17[ms-inline asm] Extract AsmStmt handling into a separate file, so as to notChad Rosier
pollute SemaStmt with extraneous asm handling logic. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162132 91177308-0d34-0410-b5e6-96231b3b80d8