Chad Rosier
3ea602cd30
[ms-inline-asm] Add test cases for the align/emit directives.
...
Part of rdar://13200215
llvm-svn: 175009
2013-02-12 21:34:14 +00:00
Chad Rosier
868d668e78
[ms-inline asm] Update test case now that we are correctly parsing __emit directives.
...
llvm-svn: 175000
2013-02-12 19:42:57 +00:00
Chad Rosier
e348d2724a
Typo.
...
llvm-svn: 174995
2013-02-12 19:15:05 +00:00
Chad Rosier
e90add40a9
[ms-inline asm] Add a few test cases for the parsing of hexidecimal integers.
...
llvm-svn: 174989
2013-02-12 18:45:21 +00:00
Chad Rosier
e3aac2c864
[ms-inline asm] Remove the -fenable-experimental-ms-inline-asm flag. MS-style
...
inline assembly can be enable with -fasm-blocks or -fms-extensions alone.
llvm-svn: 173186
2013-01-22 19:38:32 +00:00
Chad Rosier
e343bc83f0
[ms-inline asm] Updates and test case for r172743.
...
Part of rdar://12576868
llvm-svn: 172744
2013-01-17 19:22:48 +00:00
Chad Rosier
97b5895029
[ms-inline asm] Add test case for r172121.
...
Part of rdar://12991541
llvm-svn: 172122
2013-01-10 22:11:28 +00:00
Chad Rosier
d35ae732ac
[ms-inline asm] Add a test case for the offset operator where the operand is a
...
global variable.
llvm-svn: 171919
2013-01-08 23:51:48 +00:00
Chad Rosier
8f980ef08c
Test case for r171784.
...
llvm-svn: 171785
2013-01-07 20:34:40 +00:00
Chad Rosier
c8e56e8931
[driver, ms-inline asm] MS-Style inline assembly is controlled by the
...
-fasm-blocks flag, not the -fms-extensions flag.
rdar://12808010
llvm-svn: 169422
2012-12-05 21:08:21 +00:00
Chad Rosier
ed92815cb0
[ms-inline asm] Add more tests.
...
llvm-svn: 169411
2012-12-05 19:52:05 +00:00
Chad Rosier
0473d5429c
[ms-inline asm] Test case for r166790.
...
llvm-svn: 166791
2012-10-26 18:04:45 +00:00
Chad Rosier
77c8aca06a
[ms-inline asm] Add a test case for r166723 and r166724.
...
llvm-svn: 166725
2012-10-25 21:52:03 +00:00
Chad Rosier
602d09d0aa
[ms-inline asm] Test case for r166632.
...
llvm-svn: 166633
2012-10-24 22:22:12 +00:00
Chad Rosier
340c1ca0f3
[ms-inline asm] Add test cases for r166451.
...
llvm-svn: 166600
2012-10-24 17:48:01 +00:00
Chad Rosier
42146d9a06
[ms-inline asm] Add test cases for r166592. The test cases only works if the
...
source operand is a register.
llvm-svn: 166594
2012-10-24 17:23:06 +00:00
Chad Rosier
03c181b021
[ms-inline asm] Update the triple to test r166523.
...
llvm-svn: 166524
2012-10-23 23:32:21 +00:00
Chad Rosier
b8097dec8f
[ms-inline asm] Update for r166433.
...
llvm-svn: 166489
2012-10-23 17:44:40 +00:00
Eli Friedman
01e4d5937a
Testcase change for r166440.
...
llvm-svn: 166441
2012-10-22 20:50:45 +00:00
Chad Rosier
f7000f8c5b
[ms-inline asm] Test case for r166433.
...
llvm-svn: 166434
2012-10-22 19:43:17 +00:00
Chad Rosier
03c20e83b8
[ms-inline asm] Update test case for r166357.
...
llvm-svn: 166358
2012-10-20 00:47:32 +00:00
Chad Rosier
4e11eec116
[ms-inline asm] Test case for r166349 and r166352.
...
llvm-svn: 166353
2012-10-19 23:16:17 +00:00
Chad Rosier
81bf0e81e0
[ms-inline asm] Update testcase for r166316.
...
llvm-svn: 166317
2012-10-19 20:57:37 +00:00
Chad Rosier
14e0bb54a5
[ms-inline asm] Revert accidental commit. Sorry for the churn.
...
llvm-svn: 166312
2012-10-19 20:38:09 +00:00
Chad Rosier
46d8fc9d6b
[ms-inline asm] Set the SemaCallback in the TargetAsmParser.
...
llvm-svn: 166310
2012-10-19 20:36:37 +00:00
Chad Rosier
0eea516789
[ms-inline asm] Remove accidental commit.
...
llvm-svn: 166193
2012-10-18 17:51:43 +00:00
Chad Rosier
ce2bcbf8c0
[ms-inline asm] Move most of the AsmParsing logic in clang back into the MC
...
layer. Use the new ParseMSInlineAsm() API and add an implementation of the
MCAsmParserSemaCallback interface.
llvm-svn: 166184
2012-10-18 15:49:40 +00:00
Chad Rosier
4a0054f383
[ms-inline asm] Rework the front-end to use the API introduced in r165946.
...
-The front-end now builds a single assembly string and feeds it to the
AsmParser. The front-end iterates on a per statement basis by calling the
ParseStatement() function. Please note, the calling of ParseStatement() and
and any notion of MCAsmParsedOperands will be sunk into the MC layer in the
near future. I plan to expose more basic APIs such as getClobbers, etc.
-The enumeration of the AsmString expressions have been reworked to use SMLocs
rather than assembly Pieces, which were being parsed in the front-end.
-The test case, t8(), was modified due to r129223. I'll have to find a way to
work around things such as these.
Sorry for the large commit, but breaking this in multiple smaller commits proved
too irritating.
llvm-svn: 165957
2012-10-15 19:56:10 +00:00
Chad Rosier
941faac455
[ms-inline asm] Remove a bunch of parsing code from the front-end, which will be
...
reimplemented in the AsmParser where it belongs.
llvm-svn: 165825
2012-10-12 21:37:00 +00:00
Chad Rosier
dc12c45058
[ms-inline asm] Remove a bunch of parsing code from the front-end, which will be
...
reimplemented in the AsmParser where it belongs.
llvm-svn: 165752
2012-10-11 21:44:41 +00:00
Chad Rosier
e66f42634f
[ms-inline asm] Lookup the IdentifierInfo using the Idents table and remove the
...
now unused static helper function.
The test case needs to be remove temporarily until I can better filter memory
operands that aren't actual variable reference.
llvm-svn: 165751
2012-10-11 21:28:29 +00:00
Chad Rosier
3fd3330a62
Test case for r165275.
...
llvm-svn: 165276
2012-10-04 23:59:54 +00:00
Chad Rosier
bea1fa1ac3
Update test case for r165174.
...
llvm-svn: 165175
2012-10-03 22:18:51 +00:00
Chad Rosier
7768299b98
[ms-inline asm] Fixup test case to be valid ms-style asm. Fix whitespace.
...
llvm-svn: 165045
2012-10-02 20:55:30 +00:00
NAKAMURA Takumi
6bbfd1aeca
clang/test/CodeGen/ms-inline-asm.c: It requires x86 codegen. Reported by Joey Gouly.
...
llvm-svn: 164775
2012-09-27 14:55:08 +00:00
Chad Rosier
b261a50b40
[ms-inline asm] Handle the enumeration of input and output expressions in a
...
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.
llvm-svn: 163756
2012-09-13 00:06:55 +00:00
Chad Rosier
24f3a14026
Whitespace.
...
llvm-svn: 163751
2012-09-12 23:03:48 +00:00
Chad Rosier
e4e6424255
Fix test case for Release builds.
...
llvm-svn: 163737
2012-09-12 20:13:11 +00:00
Chad Rosier
fb901cac60
[ms-inline asm] Add a test case.
...
llvm-svn: 163731
2012-09-12 18:34:34 +00:00
Chad Rosier
bb8795e100
[ms-inline asm] Test case for r163729.
...
llvm-svn: 163730
2012-09-12 18:25:06 +00:00
Chad Rosier
57cd91f683
[ms-inline asm] If we have a single asm operand that maps to multiple
...
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.
llvm-svn: 163728
2012-09-12 18:14:25 +00:00
Chad Rosier
bd7fdadb90
[ms-inline asm] Add $$ before numeric constants in the IR.
...
llvm-svn: 163581
2012-09-11 00:51:28 +00:00
Chad Rosier
46b0a0adbe
[ms-inline asm] Output empty asm statements for the directives we don't
...
handle. Otherwise, the AsmParser will explode if we try to generate an
object files.
llvm-svn: 163345
2012-09-06 19:56:25 +00:00
Chad Rosier
c05d2c908d
[ms-inline asm] The IR representation of inline assembly enumerates the input
...
and output expressions much like that in GNU-style inline assembly. Output
expressions are first. Do this for MS-style inline asms.
llvm-svn: 163342
2012-09-06 19:35:00 +00:00
Chad Rosier
7cf5a44836
Update for r163231.
...
llvm-svn: 163232
2012-09-05 19:01:07 +00:00
Chad Rosier
5aee94d4ee
[ms-inline asm] Update test case for r163181.
...
llvm-svn: 163182
2012-09-05 00:08:54 +00:00
Chad Rosier
85fff2ac11
[ms-inline asm] Remove the Inline Asm Non-Standard Dialect attribute. This
...
implementation does not co-exist well with how the sideeffect and alignstack
attributes are handled.
llvm-svn: 163173
2012-09-04 22:23:54 +00:00
Chad Rosier
dea7964ddb
[ms-inline asm] The MCInstrDesc only tracks register definitions. For now,
...
assume that if the 1st operands is an expression and the instruction mayStore,
then it is a memory definition.
llvm-svn: 163144
2012-09-04 16:39:38 +00:00
Chad Rosier
41b739517c
Fix test case for Release builds.
...
llvm-svn: 162800
2012-08-28 22:22:54 +00:00
Chad Rosier
649dfc317d
[ms-inline asm] Have MSAsmStmts use the generic EmitAsmStmt codegen function.
...
llvm-svn: 162796
2012-08-28 21:11:24 +00:00
Chad Rosier
d997bd1422
[ms-inline asm] Start sending non-simple inline asms to the AsmParser.
...
The parser still can't handle all cases, so fall back to emitting a simple
MSAsmStmt if we get into trouble.
llvm-svn: 162382
2012-08-22 19:18:30 +00:00
Chad Rosier
b84cc6cfa3
[ms-inline asm] Remove this test case and the associated special case code.
...
llvm-svn: 162288
2012-08-21 17:01:26 +00:00
Chad Rosier
3d4b98b4bc
[ms-inline asm] Add a helper function, isMSAsmKeyword().
...
These require special handling, which we don't currently handle. This is being
put in place to ensure we don't do invalid symbol table lookups or try to parse
invalid assembly. The test cases just makes sure the latter isn't happening.
llvm-svn: 162050
2012-08-16 22:25:38 +00:00
Chad Rosier
8efa48dddb
Fixup test case for Release builds.
...
llvm-svn: 162038
2012-08-16 18:47:29 +00:00
Chad Rosier
592b90a476
[ms-inline asm] Start tracking which tokens are registers and which are
...
variables, function or label references. The former is a potential clobber.
The latter is either an input or an output. Unfortunately, it's difficult to
test this patch at the moment, but the added test case will eventually do so.
llvm-svn: 162026
2012-08-16 17:10:59 +00:00
Chad Rosier
b32f3d5230
[ms-inline asm] Use a set container to remove redundant clobbers.
...
llvm-svn: 161991
2012-08-15 21:55:19 +00:00
Chad Rosier
aa7c1cb5f8
[ms-inline asm] MSVC parses multiple __asm statements on a single line as one
...
statement. For example,
if (x)
__asm out dx, ax __asm out dx, ax
results in a single inline asm statement (i.e., both "out dx, ax" statements are
predicated on if(x)).
llvm-svn: 161986
2012-08-15 21:03:27 +00:00
Chad Rosier
73e325de55
[ms-inline asm] Add support for clobbers in CodeGen.
...
This is a reapplication of r161914 now that the scoping issue has been resolved
in r161966.
llvm-svn: 161967
2012-08-15 18:12:36 +00:00
Eric Christopher
d9401e2e58
Revert this to try to bring the i386 bots back.
...
llvm-svn: 161931
2012-08-15 06:31:06 +00:00
Chad Rosier
2d5d1327c4
[ms-inline asm] Add support for clobbers in CodeGen.
...
llvm-svn: 161914
2012-08-15 00:43:09 +00:00
Chad Rosier
a078a5e405
[ms-inline asm] More test cases to make sure buildMSAsmString() doesn't regress.
...
llvm-svn: 161908
2012-08-14 23:48:41 +00:00
Chad Rosier
c97a6bbfd8
[ms-inline asm] Add a helpful assert.
...
llvm-svn: 161890
2012-08-14 19:22:06 +00:00
Chad Rosier
65a8e0b69f
[ms-inline asm] Have patchMSAsmStrings() return a vector or AsmStrings.
...
The AsmParser expects a single asm instruction, but valid ms-style inline asm
statements may contain multiple instructions.
This happens with asm blocks
__asm {
mov ebx, eax
mov ecx, ebx
}
or when multiple asm statements are adjacent to one another
__asm mov ebx, eax
__asm mov ecx, ebx
and
__asm mov ebx, eax __asm mov ecx, ebx
Currently, asm blocks are not properly handled.
llvm-svn: 161780
2012-08-13 20:32:07 +00:00
Chad Rosier
1426a81a74
[ms-inline asm] Use the new Inline Asm Non-Standard Dialect attribute.
...
llvm-svn: 161642
2012-08-10 00:00:34 +00:00
Chad Rosier
360e1763d5
[ms-inline asm] Add basic codegen support for simple asm stmts. Currently,
...
only machine specific clobbers are modeled.
llvm-svn: 161524
2012-08-08 21:15:52 +00:00
Chad Rosier
83916498b8
[ms-inline asm] Add a very simple test case. Basically, we're only testing for
...
crashers at the moment (and coincidentally this case was causing a crash).
llvm-svn: 161520
2012-08-08 20:37:31 +00:00