From: Nirav Dave Date: Sun, 17 Feb 2019 03:53:23 +0000 (+0000) Subject: [X86] Prevent clang clobber checking for asm flag constraints. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6a9d9dddc230e461a95921b306558553c955f010;p=clang [X86] Prevent clang clobber checking for asm flag constraints. Update getConstraintRegister as X86 Asm flag output constraints are no longer fully alphanumeric, git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@354211 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Basic/Targets/X86.h b/lib/Basic/Targets/X86.h index 2b126268be..b69a050d23 100644 --- a/lib/Basic/Targets/X86.h +++ b/lib/Basic/Targets/X86.h @@ -198,7 +198,7 @@ public: StringRef Expression) const override { StringRef::iterator I, E; for (I = Constraint.begin(), E = Constraint.end(); I != E; ++I) { - if (isalpha(*I)) + if (isalpha(*I) || *I == '@') break; } if (I == E) diff --git a/test/CodeGen/inline-asm-x86-flag-output.c b/test/CodeGen/inline-asm-x86-flag-output.c index f647e3e3c1..74ad3a46e7 100644 --- a/test/CodeGen/inline-asm-x86-flag-output.c +++ b/test/CodeGen/inline-asm-x86-flag-output.c @@ -363,3 +363,14 @@ int test_ccs(long nr, volatile long *addr) { return 0; return 1; } + +_Bool check_no_clobber_conflicts() { + //CHECK-LABEL: @check_no_clobber_conflicts + //CHECK: = tail call i8 asm "", "={@cce},~{cx},~{dirflag},~{fpsr},~{flags}"() + _Bool b; + asm("" + : "=@cce"(b) + : + : "cx"); + return b; +}