coby created this revision.

This is an extension of the work being carried by the following change:
https://reviews.llvm.org/D26586
This commit handles cases where the size qualifier of an indirect memory 
reference operand in Intel syntax is missing (e.g. "vaddps xmm1, xmm2, [a]").
GCC will deduce the size qualifier based on the possible matches:
"vaddps xmm1, xmm2, [a]" matches only “XMMWORD PTR” qualifier.
"vaddps xmm1, xmm2, [a]{1to4}" matches only “DWORD PTR” qualifier.
"mov rax, [a]" matches only "QWORD PTR"

Currently, size directive will be deduced based on the size of the memory 
operand (apart from those cases which were handled by 
https://reviews.llvm.org/D26586).
For example:
"vaddps xmm1, xmm2, [a]"
"char a;" will imply "BYTE PTR" qualifier
"short a;" will imply "WORD PTR" qualifier.

This commit aligns LLVM to GCC’s behavior.

This is the Clang part of the review.
The LLVM part can be found here:
https://reviews.llvm.org/D32636


Repository:
  rL LLVM

https://reviews.llvm.org/D32638

Files:
  test/CodeGen/ms-inline-asm-memory-adjustments.c


Index: test/CodeGen/ms-inline-asm-memory-adjustments.c
===================================================================
--- test/CodeGen/ms-inline-asm-memory-adjustments.c
+++ test/CodeGen/ms-inline-asm-memory-adjustments.c
@@ -0,0 +1,14 @@
+// RUN: %clang_cc1 %s -triple x86_64-unknown-linux-gnu -emit-llvm -target-cpu 
skylake-avx512 -fasm-blocks -o - | FileCheck %s
+
+void t() {
+  char c;
+  // CHECK: vaddps xmm1, xmm2, dword ptr $1{1to4}
+  __asm vaddps xmm1, xmm2, [c]{1to4}
+  // CHECK: vaddps xmm1, xmm2, xmmword ptr $2
+  __asm vaddps xmm1, xmm2, [c]
+  // CHECK: mov eax, dword ptr $3
+  __asm mov eax, [c]
+  // CHECK: mov qword ptr $0, rax
+  __asm mov [c], rax
+}
+


Index: test/CodeGen/ms-inline-asm-memory-adjustments.c
===================================================================
--- test/CodeGen/ms-inline-asm-memory-adjustments.c
+++ test/CodeGen/ms-inline-asm-memory-adjustments.c
@@ -0,0 +1,14 @@
+// RUN: %clang_cc1 %s -triple x86_64-unknown-linux-gnu -emit-llvm -target-cpu skylake-avx512 -fasm-blocks -o - | FileCheck %s
+
+void t() {
+  char c;
+  // CHECK: vaddps xmm1, xmm2, dword ptr $1{1to4}
+  __asm vaddps xmm1, xmm2, [c]{1to4}
+  // CHECK: vaddps xmm1, xmm2, xmmword ptr $2
+  __asm vaddps xmm1, xmm2, [c]
+  // CHECK: mov eax, dword ptr $3
+  __asm mov eax, [c]
+  // CHECK: mov qword ptr $0, rax
+  __asm mov [c], rax
+}
+
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to