r285585 - [x86][inline-asm] Add support for curly brackets escape using "%" in extended inline asm.
Michael Zuckerman via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 31 08:27:54 PDT 2016
Author: mzuckerm
Date: Mon Oct 31 10:27:54 2016
New Revision: 285585
URL: http://llvm.org/viewvc/llvm-project?rev=285585&view=rev
Log:
[x86][inline-asm] Add support for curly brackets escape using "%" in extended inline asm.
Commit on behalf of mharoush
After LGTM and check all:
This patch is a compatibility fix for clang, matching GCC support for charter escape when using extended in-line assembly (i.e, "%{" ,"%}" --> "{" ,"}" ).
It is meant to enable support for advanced features such as AVX512 conditional\masked vector instructions/broadcast assembly syntax.
Reviewer: 1. rnk
Differential Revision: https://reviews.llvm.org/D25012
Added:
cfe/trunk/test/CodeGen/x86_inlineasm_curly_bracket_escape.c
Modified:
cfe/trunk/lib/AST/Stmt.cpp
Modified: cfe/trunk/lib/AST/Stmt.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Stmt.cpp?rev=285585&r1=285584&r2=285585&view=diff
==============================================================================
--- cfe/trunk/lib/AST/Stmt.cpp (original)
+++ cfe/trunk/lib/AST/Stmt.cpp Mon Oct 31 10:27:54 2016
@@ -533,15 +533,17 @@ unsigned GCCAsmStmt::AnalyzeAsmString(Sm
DiagOffs = CurPtr-StrStart-1;
return diag::err_asm_invalid_escape;
}
-
+ // Handle escaped char and continue looping over the asm string.
char EscapedChar = *CurPtr++;
- if (EscapedChar == '%') { // %% -> %
- // Escaped percentage sign.
- CurStringPiece += '%';
+ switch (EscapedChar) {
+ default:
+ break;
+ case '%': // %% -> %
+ case '{': // %{ -> {
+ case '}': // %} -> }
+ CurStringPiece += EscapedChar;
continue;
- }
-
- if (EscapedChar == '=') { // %= -> Generate an unique ID.
+ case '=': // %= -> Generate a unique ID.
CurStringPiece += "${:uid}";
continue;
}
Added: cfe/trunk/test/CodeGen/x86_inlineasm_curly_bracket_escape.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/x86_inlineasm_curly_bracket_escape.c?rev=285585&view=auto
==============================================================================
--- cfe/trunk/test/CodeGen/x86_inlineasm_curly_bracket_escape.c (added)
+++ cfe/trunk/test/CodeGen/x86_inlineasm_curly_bracket_escape.c Mon Oct 31 10:27:54 2016
@@ -0,0 +1,8 @@
+// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-cpu skylake-avx512 -O0 -S -emit-llvm -o - -Wall -Werror | FileCheck %s
+// This test checks validity of inline assembly using curly brackets syntax
+// for extended inline asm.
+
+void test_curly_brackets() {
+ //CHECK: %xmm1,%xmm0,%xmm1 {%k1}{z}
+ asm("vpaddb\t %%xmm1,%%xmm0,%%xmm1 %{%%k1%}%{z%}\t":::);
+}
\ No newline at end of file
More information about the cfe-commits
mailing list