On Thu, Oct 11, 2012 at 6:23 PM, Chad Rosier <[email protected]> wrote: > I was going to put them back in with the implementation that supports them..
Ultimately, I think it's fine either way. I just worry about them being put back slightly differently (introducing varied behavior) instead of expecting the tests to fail while the implementation is happening. ~Aaron > > Chad > > On Oct 11, 2012, at 3:21 PM, Aaron Ballman <[email protected]> wrote: > >> This patch mostly makes sense to me, but I'm wondering why the test >> cases are removed instead of temporarily XFAILed? Are they simply no >> longer valid? >> >> ~Aaron >> >> On Thu, Oct 11, 2012 at 5:44 PM, Chad Rosier <[email protected]> wrote: >>> Author: mcrosier >>> Date: Thu Oct 11 16:44:41 2012 >>> New Revision: 165752 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=165752&view=rev >>> Log: >>> [ms-inline asm] Remove a bunch of parsing code from the front-end, which >>> will be >>> reimplemented in the AsmParser where it belongs. >>> >>> Modified: >>> cfe/trunk/lib/Sema/SemaStmtAsm.cpp >>> cfe/trunk/test/CodeGen/ms-inline-asm.c >>> >>> Modified: cfe/trunk/lib/Sema/SemaStmtAsm.cpp >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmtAsm.cpp?rev=165752&r1=165751&r2=165752&view=diff >>> ============================================================================== >>> --- cfe/trunk/lib/Sema/SemaStmtAsm.cpp (original) >>> +++ cfe/trunk/lib/Sema/SemaStmtAsm.cpp Thu Oct 11 16:44:41 2012 >>> @@ -331,28 +331,6 @@ >>> return Ret; >>> } >>> >>> -// Check to see if the expression is a substring of the asm operand. >>> -static StringRef getMSInlineAsmExprName(StringRef Name) { >>> - // Strip off the size directives. >>> - // E.g., DWORD PTR [V] -> V >>> - if (Name.startswith("BYTE") || Name.startswith("byte") || >>> - Name.startswith("WORD") || Name.startswith("word") || >>> - Name.startswith("DWORD") || Name.startswith("dword") || >>> - Name.startswith("QWORD") || Name.startswith("qword") || >>> - Name.startswith("XWORD") || Name.startswith("xword") || >>> - Name.startswith("XMMWORD") || Name.startswith("xmmword") || >>> - Name.startswith("YMMWORD") || Name.startswith("ymmword")) { >>> - std::pair< StringRef, StringRef > SplitName = Name.split(' '); >>> - assert((SplitName.second.startswith("PTR") || >>> - SplitName.second.startswith("ptr")) && >>> - "Expected PTR/ptr!"); >>> - SplitName = SplitName.second.split('['); >>> - SplitName = SplitName.second.split(']'); >>> - return SplitName.first; >>> - } >>> - return Name; >>> -} >>> - >>> // getSpelling - Get the spelling of the AsmTok token. >>> static StringRef getSpelling(Sema &SemaRef, Token AsmTok) { >>> StringRef Asm; >>> @@ -387,8 +365,7 @@ >>> return false; >>> >>> for (unsigned i = 1, e = Pieces.size(); i != e; ++i) { >>> - StringRef Op = getMSInlineAsmExprName(Pieces[i]); >>> - if (!TI.isValidGCCRegisterName(Op)) >>> + if (!TI.isValidGCCRegisterName(Pieces[i])) >>> return false; >>> } >>> return true; >>> @@ -604,13 +581,7 @@ >>> } >>> >>> // Expr/Input or Output. >>> - StringRef Name = getMSInlineAsmExprName(Pieces[StrIdx][i]); >>> - >>> - // The expr may be a register. >>> - // E.g., DWORD PTR [eax] >>> - if (Context.getTargetInfo().isValidGCCRegisterName(Name)) >>> - continue; >>> - >>> + StringRef Name = Pieces[StrIdx][i]; >>> if (IdentifierInfo *II = &Context.Idents.get(Name)) { >>> CXXScopeSpec SS; >>> UnqualifiedId Id; >>> @@ -669,26 +640,6 @@ >>> Pieces[StrIdx][j] = OutputExprNames[i]; >>> break; >>> } >>> - // Check to see if the expression is a substring of the asm piece. >>> - std::pair< StringRef, StringRef > Split = >>> Pieces[StrIdx][j].split(' '); >>> - bool isKeyword = llvm::StringSwitch<bool>(Split.first) >>> - .Cases("BYTE", "byte", "WORD", "word", "DWORD", true) >>> - .Cases("dword", "QWORD", "qword", "XWORD", "xword", true) >>> - .Cases("XMMWORD", "xmmword", "YMMWORD", "ymmword", true) >>> - .Default(false); >>> - if (isKeyword && >>> - Split.second.find_first_of(OutputExprNames[i]) != >>> StringRef::npos) { >>> - // Is is a substring, do the replacement. >>> - SmallString<32> Res; >>> - llvm::raw_svector_ostream OS(Res); >>> - OS << '$' << OpNum; >>> - std::string piece = Pieces[StrIdx][j].str(); >>> - size_t found = piece.find(InputExprNames[i]); >>> - piece.replace(found, InputExprNames[i].size(), OS.str()); >>> - OutputExprNames[i] = piece; >>> - Pieces[StrIdx][j] = OutputExprNames[i]; >>> - break; >>> - } >>> } >>> } >>> for (unsigned i = 0, e = InputExprNames.size(); i != e; ++i, ++OpNum) { >>> @@ -704,26 +655,6 @@ >>> Pieces[StrIdx][j] = InputExprNames[i]; >>> break; >>> } >>> - // Check to see if the expression is a substring of the asm piece. >>> - std::pair< StringRef, StringRef > Split = >>> Pieces[StrIdx][j].split(' '); >>> - bool isKeyword = llvm::StringSwitch<bool>(Split.first) >>> - .Cases("BYTE", "byte", "WORD", "word", "DWORD", true) >>> - .Cases("dword", "QWORD", "qword", "XWORD", "xword", true) >>> - .Cases("XMMWORD", "xmmword", "YMMWORD", "ymmword", true) >>> - .Default(false); >>> - if (isKeyword && >>> - Split.second.find_first_of(InputExprNames[i]) != >>> StringRef::npos) { >>> - // It is a substring, do the replacement. >>> - SmallString<32> Res; >>> - llvm::raw_svector_ostream OS(Res); >>> - OS << '$' << OpNum; >>> - std::string piece = Pieces[StrIdx][j].str(); >>> - size_t found = piece.find(InputExprNames[i]); >>> - piece.replace(found, InputExprNames[i].size(), OS.str()); >>> - InputExprNames[i] = piece; >>> - Pieces[StrIdx][j] = InputExprNames[i]; >>> - break; >>> - } >>> } >>> } >>> >>> >>> Modified: cfe/trunk/test/CodeGen/ms-inline-asm.c >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/ms-inline-asm.c?rev=165752&r1=165751&r2=165752&view=diff >>> ============================================================================== >>> --- cfe/trunk/test/CodeGen/ms-inline-asm.c (original) >>> +++ cfe/trunk/test/CodeGen/ms-inline-asm.c Thu Oct 11 16:44:41 2012 >>> @@ -131,31 +131,7 @@ >>> // CHECK: call void asm sideeffect inteldialect "mov eax, $$1", >>> "~{eax},~{dirflag},~{fpsr},~{flags}"() nounwind >>> } >>> >>> -void t15(void) { >>> - __asm mov eax, DWORD PTR [eax] >>> -// CHECK: t15 >>> -// CHECK: call void asm sideeffect inteldialect "mov eax, DWORD PTR >>> [eax]", "~{eax},~{dirflag},~{fpsr},~{flags}"() nounwind >>> -} >>> - >>> -void t16(unsigned V) { >>> - __asm mov eax, DWORD PTR [V] >>> -// CHECK: t16 >>> -// CHECK: call void asm sideeffect inteldialect "mov eax, DWORD PTR [$0]", >>> "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) nounwind >>> -} >>> - >>> -void t17(void) { >>> - __asm mov eax, dword ptr [eax] >>> -// CHECK: t17 >>> -// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr >>> [eax]", "~{eax},~{dirflag},~{fpsr},~{flags}"() nounwind >>> -} >>> - >>> -void t18(void) { >>> - __asm mov dword ptr [eax], eax >>> -// CHECK: t18 >>> -// CHECK: call void asm sideeffect inteldialect "mov dword ptr [eax], >>> eax", "~{dirflag},~{fpsr},~{flags}"() nounwind >>> -} >>> - >>> -unsigned t19(void) { >>> +unsigned t15(void) { >>> unsigned i = 1, j, l = 1, m; >>> __asm { >>> mov eax, i >>> @@ -164,6 +140,6 @@ >>> mov m, eax >>> } >>> return j + m; >>> -// CHECK: t19 >>> +// CHECK: t15 >>> // 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 >>> } >>> >>> >>> _______________________________________________ >>> cfe-commits mailing list >>> [email protected] >>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
