[ms-inline asm] Set the SemaCallback in the TargetAsmParser.

llvm-svn: 166310
This commit is contained in:
Chad Rosier 2012-10-19 20:36:37 +00:00
parent 8bbb758f37
commit 46d8fc9d6b
2 changed files with 27 additions and 2 deletions

View File

@ -462,13 +462,15 @@ StmtResult Sema::ActOnMSAsmStmt(SourceLocation AsmLoc, SourceLocation LBraceLoc,
Parser->setParsingInlineAsm(true);
TargetParser->setParsingInlineAsm(true);
MCAsmParserSemaCallbackImpl MCAPSI(this);
TargetParser->setSemaCallback(&MCAPSI);
unsigned NumOutputs;
unsigned NumInputs;
std::string AsmStringIR;
SmallVector<void *, 4> OpDecls;
SmallVector<std::string, 4> Constraints;
SmallVector<std::string, 4> Clobbers;
MCAsmParserSemaCallbackImpl MCAPSI(this);
if (Parser->ParseMSInlineAsm(AsmLoc.getPtrEncoding(), AsmStringIR,
NumOutputs, NumInputs, OpDecls, Constraints,
Clobbers, MII, IP, MCAPSI))

View File

@ -1,6 +1,6 @@
// REQUIRES: x86-64-registered-target
// RUN: %clang_cc1 %s -triple x86_64-apple-darwin10 -O0 -fms-extensions -fenable-experimental-ms-inline-asm -w -emit-llvm -o - | FileCheck %s
#if 0
void t1() {
// CHECK: @t1
// CHECK: call void asm sideeffect inteldialect "", "~{dirflag},~{fpsr},~{flags}"() nounwind
@ -114,3 +114,26 @@ unsigned t12(void) {
// CHECK: t12
// CHECK: call void asm sideeffect inteldialect "mov eax, $2\0A\09mov $0, eax\0A\09mov eax, $3\0A\09mov $1, eax", "=*m,=*m,*m,*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}, i32* %{{.*}}, i32* %{{.*}}, i32* %{{.*}}) nounwind
}
#endif
void t13() {
char i = 1;
short j = 2;
__asm movzx eax, i
__asm movzx eax, j
}
#if 0
void t13() {
unsigned i = 1, j = 2;
// __asm mov eax, [ebx]
// __asm mov eax, [4*ecx]
// __asm mov eax, [4]
// __asm mov eax, [ebx + 4*ecx]
// __asm mov eax, [ebx + 4*ecx + 4]
__asm mov eax, [i]
// __asm mov eax, [i + 4*ecx]
// __asm mov eax, [i + 4*ecx + 4]
// __asm mov eax, [4*i]
// __asm mov eax, [ebx + 4*i]
// __asm mov eax, [ebx + 4*i + 4]
}
#endif