[PATCH] D62835: support -march=cooperlake (clang part)

2019-06-03 Thread Kan Shengchen via Phabricator via cfe-commits
skan created this revision.
skan added reviewers: craig.topper, LuoYuanke, xiangzhangllvm, pengfei.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Repository:
  rC Clang

https://reviews.llvm.org/D62835

Files:
  include/clang/Basic/X86Target.def
  lib/Basic/Targets/X86.cpp
  test/Driver/x86-march.c
  test/Misc/target-invalid-cpu-note.c
  test/Preprocessor/predefined-arch-macros.c

Index: test/Preprocessor/predefined-arch-macros.c
===
--- test/Preprocessor/predefined-arch-macros.c
+++ test/Preprocessor/predefined-arch-macros.c
@@ -1083,6 +1083,105 @@
 // CHECK_CLX_M64: #define __x86_64 1
 // CHECK_CLX_M64: #define __x86_64__ 1
 
+// RUN: %clang -march=cooperlake -m32 -E -dM %s -o - 2>&1 \
+// RUN: -target i386-unknown-linux \
+// RUN:   | FileCheck -match-full-lines %s -check-prefix=CHECK_CPX_M32
+// CHECK_CPX_M32: #define __AES__ 1
+// CHECK_CPX_M32: #define __AVX2__ 1
+// CHECK_CPX_M32: #define __AVX512BF16__ 1
+// CHECK_CPX_M32: #define __AVX512BW__ 1
+// CHECK_CPX_M32: #define __AVX512CD__ 1
+// CHECK_CPX_M32: #define __AVX512DQ__ 1
+// CHECK_CPX_M32: #define __AVX512F__ 1
+// CHECK_CPX_M32: #define __AVX512VL__ 1
+// CHECK_CPX_M32: #define __AVX512VNNI__ 1
+// CHECK_CPX_M32: #define __AVX__ 1
+// CHECK_CPX_M32: #define __BMI2__ 1
+// CHECK_CPX_M32: #define __BMI__ 1
+// CHECK_CPX_M32: #define __CLFLUSHOPT__ 1
+// CHECK_CPX_M32: #define __CLWB__ 1
+// CHECK_CPX_M32: #define __F16C__ 1
+// CHECK_CPX_M32: #define __FMA__ 1
+// CHECK_CPX_M32: #define __INVPCID__ 1
+// CHECK_CPX_M32: #define __LZCNT__ 1
+// CHECK_CPX_M32: #define __MMX__ 1
+// CHECK_CPX_M32: #define __MOVBE__ 1
+// CHECK_CPX_M32: #define __MPX__ 1
+// CHECK_CPX_M32: #define __PCLMUL__ 1
+// CHECK_CPX_M32: #define __PKU__ 1
+// CHECK_CPX_M32: #define __POPCNT__ 1
+// CHECK_CPX_M32: #define __PRFCHW__ 1
+// CHECK_CPX_M32: #define __RDRND__ 1
+// CHECK_CPX_M32: #define __RDSEED__ 1
+// CHECK_CPX_M32-NOT: #define __SGX__ 1
+// CHECK_CPX_M32: #define __SSE2__ 1
+// CHECK_CPX_M32: #define __SSE3__ 1
+// CHECK_CPX_M32: #define __SSE4_1__ 1
+// CHECK_CPX_M32: #define __SSE4_2__ 1
+// CHECK_CPX_M32: #define __SSE__ 1
+// CHECK_CPX_M32: #define __SSSE3__ 1
+// CHECK_CPX_M32: #define __XSAVEC__ 1
+// CHECK_CPX_M32: #define __XSAVEOPT__ 1
+// CHECK_CPX_M32: #define __XSAVES__ 1
+// CHECK_CPX_M32: #define __XSAVE__ 1
+// CHECK_CPX_M32: #define __corei7 1
+// CHECK_CPX_M32: #define __corei7__ 1
+// CHECK_CPX_M32: #define __i386 1
+// CHECK_CPX_M32: #define __i386__ 1
+// CHECK_CPX_M32: #define __tune_corei7__ 1
+// CHECK_CPX_M32: #define i386 1
+
+// RUN: %clang -march=cooperlake -m64 -E -dM %s -o - 2>&1 \
+// RUN: -target i386-unknown-linux \
+// RUN:   | FileCheck -match-full-lines %s -check-prefix=CHECK_CPX_M64
+// CHECK_CPX_M64: #define __AES__ 1
+// CHECK_CPX_M64: #define __AVX2__ 1
+// CHECK_CPX_M64: #define __AVX512BF16__ 1
+// CHECK_CPX_M64: #define __AVX512BW__ 1
+// CHECK_CPX_M64: #define __AVX512CD__ 1
+// CHECK_CPX_M64: #define __AVX512DQ__ 1
+// CHECK_CPX_M64: #define __AVX512F__ 1
+// CHECK_CPX_M64: #define __AVX512VL__ 1
+// CHECK_CPX_M64: #define __AVX512VNNI__ 1
+// CHECK_CPX_M64: #define __AVX__ 1
+// CHECK_CPX_M64: #define __BMI2__ 1
+// CHECK_CPX_M64: #define __BMI__ 1
+// CHECK_CPX_M64: #define __CLFLUSHOPT__ 1
+// CHECK_CPX_M64: #define __CLWB__ 1
+// CHECK_CPX_M64: #define __F16C__ 1
+// CHECK_CPX_M64: #define __FMA__ 1
+// CHECK_CPX_M64: #define __INVPCID__ 1
+// CHECK_CPX_M64: #define __LZCNT__ 1
+// CHECK_CPX_M64: #define __MMX__ 1
+// CHECK_CPX_M64: #define __MOVBE__ 1
+// CHECK_CPX_M64: #define __MPX__ 1
+// CHECK_CPX_M64: #define __PCLMUL__ 1
+// CHECK_CPX_M64: #define __PKU__ 1
+// CHECK_CPX_M64: #define __POPCNT__ 1
+// CHECK_CPX_M64: #define __PRFCHW__ 1
+// CHECK_CPX_M64: #define __RDRND__ 1
+// CHECK_CPX_M64: #define __RDSEED__ 1
+// CHECK_CPX_M64-NOT: #define __SGX__ 1
+// CHECK_CPX_M64: #define __SSE2_MATH__ 1
+// CHECK_CPX_M64: #define __SSE2__ 1
+// CHECK_CPX_M64: #define __SSE3__ 1
+// CHECK_CPX_M64: #define __SSE4_1__ 1
+// CHECK_CPX_M64: #define __SSE4_2__ 1
+// CHECK_CPX_M64: #define __SSE_MATH__ 1
+// CHECK_CPX_M64: #define __SSE__ 1
+// CHECK_CPX_M64: #define __SSSE3__ 1
+// CHECK_CPX_M64: #define __XSAVEC__ 1
+// CHECK_CPX_M64: #define __XSAVEOPT__ 1
+// CHECK_CPX_M64: #define __XSAVES__ 1
+// CHECK_CPX_M64: #define __XSAVE__ 1
+// CHECK_CPX_M64: #define __amd64 1
+// CHECK_CPX_M64: #define __amd64__ 1
+// CHECK_CPX_M64: #define __corei7 1
+// CHECK_CPX_M64: #define __corei7__ 1
+// CHECK_CPX_M64: #define __tune_corei7__ 1
+// CHECK_CPX_M64: #define __x86_64 1
+// CHECK_CPX_M64: #define __x86_64__ 1
+
 // RUN: %clang -march=cannonlake -m32 -E -dM %s -o - 2>&1 \
 // RUN: -target i386-unknown-linux \
 // RUN:   | FileCheck -match-full-lines %s -check-prefix=CHECK_CNL_M32
Index: test/Misc/target-invalid-cpu-note.c
===
--- test/Misc/target-invalid-cpu

[PATCH] D62363: [X86] Enable intrinsics that convert float and bf16 data to each other

2019-06-05 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 203170.
skan added a comment.

When target feature `avx512bf16` is enabled, `avx512vl` is not enabled 
implicity for some reasons by now. But `_mm_cvtness_sbh`, `_mm256_cvtpbh_ps` , 
`_mm256_maskz_cvtpbh_ps` , `_mm256_mask_cvtpbh_ps` need `avx512vl` feature. So 
I move their definition from `avx512bf16intrin` to `avx512vlbf16intrin.h`, and 
move corresponding test cases from `avx512bf16-builtins.c` to 
`avx512vlbf16-builtins.c`.

And the test for `_mm_cvtness_sbh` is fixed in the new patch.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62363/new/

https://reviews.llvm.org/D62363

Files:
  include/clang/Basic/BuiltinsX86.def
  lib/CodeGen/CGBuiltin.cpp
  lib/Headers/avx512bf16intrin.h
  lib/Headers/avx512vlbf16intrin.h
  test/CodeGen/avx512bf16-builtins.c
  test/CodeGen/avx512vlbf16-builtins.c

Index: test/CodeGen/avx512vlbf16-builtins.c
===
--- test/CodeGen/avx512vlbf16-builtins.c
+++ test/CodeGen/avx512vlbf16-builtins.c
@@ -161,3 +161,39 @@
   // CHECK: ret <8 x float> %{{.*}}
   return _mm256_mask_dpbf16_ps(D, U, A, B);
 }
+
+__bfloat16 test_mm_cvtness_sbh(float A) {
+  // CHECK-LABEL: @test_mm_cvtness_sbh
+  // CHECK: @llvm.x86.avx512bf16.mask.cvtneps2bf16.128
+  // CHECK: ret i16 %{{.*}}
+  return _mm_cvtness_sbh(A);
+}
+
+__m256 test_mm256_cvtpbh_ps(__m128bh A) {
+  // CHECK-LABEL: @test_mm256_cvtpbh_ps
+  // CHECK: sext <8 x i16> %{{.*}} to <8 x i32>
+  // CHECK: @llvm.x86.avx2.pslli.d
+  // CHECK: bitcast <4 x i64> %{{.*}} to <8 x float>
+  // CHECK: ret <8 x float> %{{.*}}
+  return _mm256_cvtpbh_ps(A);
+}
+
+__m256 test_mm256_maskz_cvtpbh_ps(__mmask8 M, __m128bh A) {
+  // CHECK-LABEL: @test_mm256_maskz_cvtpbh_ps
+  // CHECK: sext <8 x i16> %{{.*}} to <8 x i32>
+  // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
+  // CHECK: @llvm.x86.avx2.pslli.d
+  // CHECK: bitcast <4 x i64> %{{.*}} to <8 x float>
+  // CHECK: ret <8 x float> %{{.*}}
+  return _mm256_maskz_cvtpbh_ps(M, A);
+}
+
+__m256 test_mm256_mask_cvtpbh_ps(__m256 S, __mmask8 M, __m128bh A) {
+  // CHECK-LABEL: @test_mm256_mask_cvtpbh_ps
+  // CHECK: sext <8 x i16> %{{.*}} to <8 x i32>
+  // CHECK: @llvm.x86.avx2.pslli.d
+  // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
+  // CHECK: bitcast <4 x i64> %{{.*}} to <8 x float>
+  // CHECK: ret <8 x float> %{{.*}}
+  return _mm256_mask_cvtpbh_ps(S, M, A);
+}
Index: test/CodeGen/avx512bf16-builtins.c
===
--- test/CodeGen/avx512bf16-builtins.c
+++ test/CodeGen/avx512bf16-builtins.c
@@ -4,46 +4,55 @@
 
 #include 
 
-__m512bh test_mm512_cvtne2ps2bf16(__m512 A, __m512 B) {
-  // CHECK-LABEL: @test_mm512_cvtne2ps2bf16
+float test_mm_cvtsbh_ss(__bfloat16 A) {
+  // CHECK-LABEL: @test_mm_cvtsbh_ss
+  // CHECK: zext i16 %{{.*}} to i32
+  // CHECK: shl i32 %{{.*}}, 16
+  // CHECK: bitcast i32 %{{.*}} to float
+  // CHECK: ret float %{{.*}}
+  return _mm_cvtsbh_ss(A);
+}
+
+__m512bh test_mm512_cvtne2ps_pbh(__m512 A, __m512 B) {
+  // CHECK-LABEL: @test_mm512_cvtne2ps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
   // CHECK: ret <32 x i16> %{{.*}}
   return _mm512_cvtne2ps_pbh(A, B);
 }
 
-__m512bh test_mm512_maskz_cvtne2ps2bf16(__m512 A, __m512 B, __mmask32 U) {
-  // CHECK-LABEL: @test_mm512_maskz_cvtne2ps2bf16
+__m512bh test_mm512_maskz_cvtne2ps_pbh(__m512 A, __m512 B, __mmask32 U) {
+  // CHECK-LABEL: @test_mm512_maskz_cvtne2ps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
   // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
   // CHECK: ret <32 x i16> %{{.*}}
   return _mm512_maskz_cvtne2ps_pbh(U, A, B);
 }
 
-__m512bh test_mm512_mask_cvtne2ps2bf16(__m512bh C, __mmask32 U, __m512 A, __m512 B) {
-  // CHECK-LABEL: @test_mm512_mask_cvtne2ps2bf16
+__m512bh test_mm512_mask_cvtne2ps_pbh(__m512bh C, __mmask32 U, __m512 A, __m512 B) {
+  // CHECK-LABEL: @test_mm512_mask_cvtne2ps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
   // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
   // CHECK: ret <32 x i16> %{{.*}}
   return _mm512_mask_cvtne2ps_pbh(C, U, A, B);
 }
 
-__m256bh test_mm512_cvtneps2bf16(__m512 A) {
-  // CHECK-LABEL: @test_mm512_cvtneps2bf16
+__m256bh test_mm512_cvtneps_pbh(__m512 A) {
+  // CHECK-LABEL: @test_mm512_cvtneps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512
   // CHECK: ret <16 x i16> %{{.*}}
   return _mm512_cvtneps_pbh(A);
 }
 
-__m256bh test_mm512_mask_cvtneps2bf16(__m256bh C, __mmask16 U, __m512 A) {
-  // CHECK-LABEL: @test_mm512_mask_cvtneps2bf16
+__m256bh test_mm512_mask_cvtneps_pbh(__m256bh C, __mmask16 U, __m512 A) {
+  // CHECK-LABEL: @test_mm512_mask_cvtneps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512
   // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}
   // CHECK: ret <16 x i16> %{{.*}}
   return _mm512_mask_cvtneps_pbh(C, U, A);
 }
 

[PATCH] D62835: [X86] -march=cooperlake (clang)

2019-06-06 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 203327.
skan added a comment.

avoid implicit type conversion for intrinsic parameter


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62835/new/

https://reviews.llvm.org/D62835

Files:
  include/clang/Basic/BuiltinsX86.def
  lib/CodeGen/CGBuiltin.cpp
  lib/Headers/avx512bf16intrin.h
  lib/Headers/avx512vlbf16intrin.h
  test/CodeGen/avx512bf16-builtins.c
  test/CodeGen/avx512vlbf16-builtins.c

Index: test/CodeGen/avx512vlbf16-builtins.c
===
--- test/CodeGen/avx512vlbf16-builtins.c
+++ test/CodeGen/avx512vlbf16-builtins.c
@@ -161,3 +161,39 @@
   // CHECK: ret <8 x float> %{{.*}}
   return _mm256_mask_dpbf16_ps(D, U, A, B);
 }
+
+__bfloat16 test_mm_cvtness_sbh(float A) {
+  // CHECK-LABEL: @test_mm_cvtness_sbh
+  // CHECK: @llvm.x86.avx512bf16.mask.cvtneps2bf16.128
+  // CHECK: ret i16 %{{.*}}
+  return _mm_cvtness_sbh(A);
+}
+
+__m256 test_mm256_cvtpbh_ps(__m128bh A) {
+  // CHECK-LABEL: @test_mm256_cvtpbh_ps
+  // CHECK: sext <8 x i16> %{{.*}} to <8 x i32>
+  // CHECK: @llvm.x86.avx2.pslli.d
+  // CHECK: bitcast <4 x i64> %{{.*}} to <8 x float>
+  // CHECK: ret <8 x float> %{{.*}}
+  return _mm256_cvtpbh_ps(A);
+}
+
+__m256 test_mm256_maskz_cvtpbh_ps(__mmask8 M, __m128bh A) {
+  // CHECK-LABEL: @test_mm256_maskz_cvtpbh_ps
+  // CHECK: sext <8 x i16> %{{.*}} to <8 x i32>
+  // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
+  // CHECK: @llvm.x86.avx2.pslli.d
+  // CHECK: bitcast <4 x i64> %{{.*}} to <8 x float>
+  // CHECK: ret <8 x float> %{{.*}}
+  return _mm256_maskz_cvtpbh_ps(M, A);
+}
+
+__m256 test_mm256_mask_cvtpbh_ps(__m256 S, __mmask8 M, __m128bh A) {
+  // CHECK-LABEL: @test_mm256_mask_cvtpbh_ps
+  // CHECK: sext <8 x i16> %{{.*}} to <8 x i32>
+  // CHECK: @llvm.x86.avx2.pslli.d
+  // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
+  // CHECK: bitcast <4 x i64> %{{.*}} to <8 x float>
+  // CHECK: ret <8 x float> %{{.*}}
+  return _mm256_mask_cvtpbh_ps(S, M, A);
+}
Index: test/CodeGen/avx512bf16-builtins.c
===
--- test/CodeGen/avx512bf16-builtins.c
+++ test/CodeGen/avx512bf16-builtins.c
@@ -4,46 +4,55 @@
 
 #include 
 
-__m512bh test_mm512_cvtne2ps2bf16(__m512 A, __m512 B) {
-  // CHECK-LABEL: @test_mm512_cvtne2ps2bf16
+float test_mm_cvtsbh_ss(__bfloat16 A) {
+  // CHECK-LABEL: @test_mm_cvtsbh_ss
+  // CHECK: zext i16 %{{.*}} to i32
+  // CHECK: shl i32 %{{.*}}, 16
+  // CHECK: bitcast i32 %{{.*}} to float
+  // CHECK: ret float %{{.*}}
+  return _mm_cvtsbh_ss(A);
+}
+
+__m512bh test_mm512_cvtne2ps_pbh(__m512 A, __m512 B) {
+  // CHECK-LABEL: @test_mm512_cvtne2ps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
   // CHECK: ret <32 x i16> %{{.*}}
   return _mm512_cvtne2ps_pbh(A, B);
 }
 
-__m512bh test_mm512_maskz_cvtne2ps2bf16(__m512 A, __m512 B, __mmask32 U) {
-  // CHECK-LABEL: @test_mm512_maskz_cvtne2ps2bf16
+__m512bh test_mm512_maskz_cvtne2ps_pbh(__m512 A, __m512 B, __mmask32 U) {
+  // CHECK-LABEL: @test_mm512_maskz_cvtne2ps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
   // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
   // CHECK: ret <32 x i16> %{{.*}}
   return _mm512_maskz_cvtne2ps_pbh(U, A, B);
 }
 
-__m512bh test_mm512_mask_cvtne2ps2bf16(__m512bh C, __mmask32 U, __m512 A, __m512 B) {
-  // CHECK-LABEL: @test_mm512_mask_cvtne2ps2bf16
+__m512bh test_mm512_mask_cvtne2ps_pbh(__m512bh C, __mmask32 U, __m512 A, __m512 B) {
+  // CHECK-LABEL: @test_mm512_mask_cvtne2ps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
   // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
   // CHECK: ret <32 x i16> %{{.*}}
   return _mm512_mask_cvtne2ps_pbh(C, U, A, B);
 }
 
-__m256bh test_mm512_cvtneps2bf16(__m512 A) {
-  // CHECK-LABEL: @test_mm512_cvtneps2bf16
+__m256bh test_mm512_cvtneps_pbh(__m512 A) {
+  // CHECK-LABEL: @test_mm512_cvtneps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512
   // CHECK: ret <16 x i16> %{{.*}}
   return _mm512_cvtneps_pbh(A);
 }
 
-__m256bh test_mm512_mask_cvtneps2bf16(__m256bh C, __mmask16 U, __m512 A) {
-  // CHECK-LABEL: @test_mm512_mask_cvtneps2bf16
+__m256bh test_mm512_mask_cvtneps_pbh(__m256bh C, __mmask16 U, __m512 A) {
+  // CHECK-LABEL: @test_mm512_mask_cvtneps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512
   // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}
   // CHECK: ret <16 x i16> %{{.*}}
   return _mm512_mask_cvtneps_pbh(C, U, A);
 }
 
-__m256bh test_mm512_maskz_cvtneps2bf16(__m512 A, __mmask16 U) {
-  // CHECK-LABEL: @test_mm512_maskz_cvtneps2bf16
+__m256bh test_mm512_maskz_cvtneps_pbh(__m512 A, __mmask16 U) {
+  // CHECK-LABEL: @test_mm512_maskz_cvtneps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512
   // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}
   // CHECK: ret <16 x i16> %{{.*}}
@@ -72,3 +81,32 

[PATCH] D62835: [X86] -march=cooperlake (clang)

2019-06-06 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 203329.
skan added a comment.

uploaded a  unrelated patch last time


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62835/new/

https://reviews.llvm.org/D62835

Files:
  include/clang/Basic/X86Target.def
  lib/Basic/Targets/X86.cpp
  test/Driver/x86-march.c
  test/Misc/target-invalid-cpu-note.c
  test/Preprocessor/predefined-arch-macros.c

Index: test/Preprocessor/predefined-arch-macros.c
===
--- test/Preprocessor/predefined-arch-macros.c
+++ test/Preprocessor/predefined-arch-macros.c
@@ -1083,6 +1083,105 @@
 // CHECK_CLX_M64: #define __x86_64 1
 // CHECK_CLX_M64: #define __x86_64__ 1
 
+// RUN: %clang -march=cooperlake -m32 -E -dM %s -o - 2>&1 \
+// RUN: -target i386-unknown-linux \
+// RUN:   | FileCheck -match-full-lines %s -check-prefix=CHECK_CPX_M32
+// CHECK_CPX_M32: #define __AES__ 1
+// CHECK_CPX_M32: #define __AVX2__ 1
+// CHECK_CPX_M32: #define __AVX512BF16__ 1
+// CHECK_CPX_M32: #define __AVX512BW__ 1
+// CHECK_CPX_M32: #define __AVX512CD__ 1
+// CHECK_CPX_M32: #define __AVX512DQ__ 1
+// CHECK_CPX_M32: #define __AVX512F__ 1
+// CHECK_CPX_M32: #define __AVX512VL__ 1
+// CHECK_CPX_M32: #define __AVX512VNNI__ 1
+// CHECK_CPX_M32: #define __AVX__ 1
+// CHECK_CPX_M32: #define __BMI2__ 1
+// CHECK_CPX_M32: #define __BMI__ 1
+// CHECK_CPX_M32: #define __CLFLUSHOPT__ 1
+// CHECK_CPX_M32: #define __CLWB__ 1
+// CHECK_CPX_M32: #define __F16C__ 1
+// CHECK_CPX_M32: #define __FMA__ 1
+// CHECK_CPX_M32: #define __INVPCID__ 1
+// CHECK_CPX_M32: #define __LZCNT__ 1
+// CHECK_CPX_M32: #define __MMX__ 1
+// CHECK_CPX_M32: #define __MOVBE__ 1
+// CHECK_CPX_M32: #define __MPX__ 1
+// CHECK_CPX_M32: #define __PCLMUL__ 1
+// CHECK_CPX_M32: #define __PKU__ 1
+// CHECK_CPX_M32: #define __POPCNT__ 1
+// CHECK_CPX_M32: #define __PRFCHW__ 1
+// CHECK_CPX_M32: #define __RDRND__ 1
+// CHECK_CPX_M32: #define __RDSEED__ 1
+// CHECK_CPX_M32-NOT: #define __SGX__ 1
+// CHECK_CPX_M32: #define __SSE2__ 1
+// CHECK_CPX_M32: #define __SSE3__ 1
+// CHECK_CPX_M32: #define __SSE4_1__ 1
+// CHECK_CPX_M32: #define __SSE4_2__ 1
+// CHECK_CPX_M32: #define __SSE__ 1
+// CHECK_CPX_M32: #define __SSSE3__ 1
+// CHECK_CPX_M32: #define __XSAVEC__ 1
+// CHECK_CPX_M32: #define __XSAVEOPT__ 1
+// CHECK_CPX_M32: #define __XSAVES__ 1
+// CHECK_CPX_M32: #define __XSAVE__ 1
+// CHECK_CPX_M32: #define __corei7 1
+// CHECK_CPX_M32: #define __corei7__ 1
+// CHECK_CPX_M32: #define __i386 1
+// CHECK_CPX_M32: #define __i386__ 1
+// CHECK_CPX_M32: #define __tune_corei7__ 1
+// CHECK_CPX_M32: #define i386 1
+
+// RUN: %clang -march=cooperlake -m64 -E -dM %s -o - 2>&1 \
+// RUN: -target i386-unknown-linux \
+// RUN:   | FileCheck -match-full-lines %s -check-prefix=CHECK_CPX_M64
+// CHECK_CPX_M64: #define __AES__ 1
+// CHECK_CPX_M64: #define __AVX2__ 1
+// CHECK_CPX_M64: #define __AVX512BF16__ 1
+// CHECK_CPX_M64: #define __AVX512BW__ 1
+// CHECK_CPX_M64: #define __AVX512CD__ 1
+// CHECK_CPX_M64: #define __AVX512DQ__ 1
+// CHECK_CPX_M64: #define __AVX512F__ 1
+// CHECK_CPX_M64: #define __AVX512VL__ 1
+// CHECK_CPX_M64: #define __AVX512VNNI__ 1
+// CHECK_CPX_M64: #define __AVX__ 1
+// CHECK_CPX_M64: #define __BMI2__ 1
+// CHECK_CPX_M64: #define __BMI__ 1
+// CHECK_CPX_M64: #define __CLFLUSHOPT__ 1
+// CHECK_CPX_M64: #define __CLWB__ 1
+// CHECK_CPX_M64: #define __F16C__ 1
+// CHECK_CPX_M64: #define __FMA__ 1
+// CHECK_CPX_M64: #define __INVPCID__ 1
+// CHECK_CPX_M64: #define __LZCNT__ 1
+// CHECK_CPX_M64: #define __MMX__ 1
+// CHECK_CPX_M64: #define __MOVBE__ 1
+// CHECK_CPX_M64: #define __MPX__ 1
+// CHECK_CPX_M64: #define __PCLMUL__ 1
+// CHECK_CPX_M64: #define __PKU__ 1
+// CHECK_CPX_M64: #define __POPCNT__ 1
+// CHECK_CPX_M64: #define __PRFCHW__ 1
+// CHECK_CPX_M64: #define __RDRND__ 1
+// CHECK_CPX_M64: #define __RDSEED__ 1
+// CHECK_CPX_M64-NOT: #define __SGX__ 1
+// CHECK_CPX_M64: #define __SSE2_MATH__ 1
+// CHECK_CPX_M64: #define __SSE2__ 1
+// CHECK_CPX_M64: #define __SSE3__ 1
+// CHECK_CPX_M64: #define __SSE4_1__ 1
+// CHECK_CPX_M64: #define __SSE4_2__ 1
+// CHECK_CPX_M64: #define __SSE_MATH__ 1
+// CHECK_CPX_M64: #define __SSE__ 1
+// CHECK_CPX_M64: #define __SSSE3__ 1
+// CHECK_CPX_M64: #define __XSAVEC__ 1
+// CHECK_CPX_M64: #define __XSAVEOPT__ 1
+// CHECK_CPX_M64: #define __XSAVES__ 1
+// CHECK_CPX_M64: #define __XSAVE__ 1
+// CHECK_CPX_M64: #define __amd64 1
+// CHECK_CPX_M64: #define __amd64__ 1
+// CHECK_CPX_M64: #define __corei7 1
+// CHECK_CPX_M64: #define __corei7__ 1
+// CHECK_CPX_M64: #define __tune_corei7__ 1
+// CHECK_CPX_M64: #define __x86_64 1
+// CHECK_CPX_M64: #define __x86_64__ 1
+
 // RUN: %clang -march=cannonlake -m32 -E -dM %s -o - 2>&1 \
 // RUN: -target i386-unknown-linux \
 // RUN:   | FileCheck -match-full-lines %s -check-prefix=CHECK_CNL_M32
Index: test/Misc/target-invalid-cpu-note.c
===
--- test/Misc/target-invalid-cpu-note.c
+++ test/Misc/ta

[PATCH] D62363: [X86] Enable intrinsics that convert float and bf16 data to each other

2019-06-06 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 203330.
skan added a comment.

avoid implicit type conversion for intrinsic parameter


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62363/new/

https://reviews.llvm.org/D62363

Files:
  include/clang/Basic/BuiltinsX86.def
  lib/CodeGen/CGBuiltin.cpp
  lib/Headers/avx512bf16intrin.h
  lib/Headers/avx512vlbf16intrin.h
  test/CodeGen/avx512bf16-builtins.c
  test/CodeGen/avx512vlbf16-builtins.c

Index: test/CodeGen/avx512vlbf16-builtins.c
===
--- test/CodeGen/avx512vlbf16-builtins.c
+++ test/CodeGen/avx512vlbf16-builtins.c
@@ -161,3 +161,39 @@
   // CHECK: ret <8 x float> %{{.*}}
   return _mm256_mask_dpbf16_ps(D, U, A, B);
 }
+
+__bfloat16 test_mm_cvtness_sbh(float A) {
+  // CHECK-LABEL: @test_mm_cvtness_sbh
+  // CHECK: @llvm.x86.avx512bf16.mask.cvtneps2bf16.128
+  // CHECK: ret i16 %{{.*}}
+  return _mm_cvtness_sbh(A);
+}
+
+__m256 test_mm256_cvtpbh_ps(__m128bh A) {
+  // CHECK-LABEL: @test_mm256_cvtpbh_ps
+  // CHECK: sext <8 x i16> %{{.*}} to <8 x i32>
+  // CHECK: @llvm.x86.avx2.pslli.d
+  // CHECK: bitcast <4 x i64> %{{.*}} to <8 x float>
+  // CHECK: ret <8 x float> %{{.*}}
+  return _mm256_cvtpbh_ps(A);
+}
+
+__m256 test_mm256_maskz_cvtpbh_ps(__mmask8 M, __m128bh A) {
+  // CHECK-LABEL: @test_mm256_maskz_cvtpbh_ps
+  // CHECK: sext <8 x i16> %{{.*}} to <8 x i32>
+  // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
+  // CHECK: @llvm.x86.avx2.pslli.d
+  // CHECK: bitcast <4 x i64> %{{.*}} to <8 x float>
+  // CHECK: ret <8 x float> %{{.*}}
+  return _mm256_maskz_cvtpbh_ps(M, A);
+}
+
+__m256 test_mm256_mask_cvtpbh_ps(__m256 S, __mmask8 M, __m128bh A) {
+  // CHECK-LABEL: @test_mm256_mask_cvtpbh_ps
+  // CHECK: sext <8 x i16> %{{.*}} to <8 x i32>
+  // CHECK: @llvm.x86.avx2.pslli.d
+  // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
+  // CHECK: bitcast <4 x i64> %{{.*}} to <8 x float>
+  // CHECK: ret <8 x float> %{{.*}}
+  return _mm256_mask_cvtpbh_ps(S, M, A);
+}
Index: test/CodeGen/avx512bf16-builtins.c
===
--- test/CodeGen/avx512bf16-builtins.c
+++ test/CodeGen/avx512bf16-builtins.c
@@ -4,46 +4,55 @@
 
 #include 
 
-__m512bh test_mm512_cvtne2ps2bf16(__m512 A, __m512 B) {
-  // CHECK-LABEL: @test_mm512_cvtne2ps2bf16
+float test_mm_cvtsbh_ss(__bfloat16 A) {
+  // CHECK-LABEL: @test_mm_cvtsbh_ss
+  // CHECK: zext i16 %{{.*}} to i32
+  // CHECK: shl i32 %{{.*}}, 16
+  // CHECK: bitcast i32 %{{.*}} to float
+  // CHECK: ret float %{{.*}}
+  return _mm_cvtsbh_ss(A);
+}
+
+__m512bh test_mm512_cvtne2ps_pbh(__m512 A, __m512 B) {
+  // CHECK-LABEL: @test_mm512_cvtne2ps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
   // CHECK: ret <32 x i16> %{{.*}}
   return _mm512_cvtne2ps_pbh(A, B);
 }
 
-__m512bh test_mm512_maskz_cvtne2ps2bf16(__m512 A, __m512 B, __mmask32 U) {
-  // CHECK-LABEL: @test_mm512_maskz_cvtne2ps2bf16
+__m512bh test_mm512_maskz_cvtne2ps_pbh(__m512 A, __m512 B, __mmask32 U) {
+  // CHECK-LABEL: @test_mm512_maskz_cvtne2ps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
   // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
   // CHECK: ret <32 x i16> %{{.*}}
   return _mm512_maskz_cvtne2ps_pbh(U, A, B);
 }
 
-__m512bh test_mm512_mask_cvtne2ps2bf16(__m512bh C, __mmask32 U, __m512 A, __m512 B) {
-  // CHECK-LABEL: @test_mm512_mask_cvtne2ps2bf16
+__m512bh test_mm512_mask_cvtne2ps_pbh(__m512bh C, __mmask32 U, __m512 A, __m512 B) {
+  // CHECK-LABEL: @test_mm512_mask_cvtne2ps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
   // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
   // CHECK: ret <32 x i16> %{{.*}}
   return _mm512_mask_cvtne2ps_pbh(C, U, A, B);
 }
 
-__m256bh test_mm512_cvtneps2bf16(__m512 A) {
-  // CHECK-LABEL: @test_mm512_cvtneps2bf16
+__m256bh test_mm512_cvtneps_pbh(__m512 A) {
+  // CHECK-LABEL: @test_mm512_cvtneps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512
   // CHECK: ret <16 x i16> %{{.*}}
   return _mm512_cvtneps_pbh(A);
 }
 
-__m256bh test_mm512_mask_cvtneps2bf16(__m256bh C, __mmask16 U, __m512 A) {
-  // CHECK-LABEL: @test_mm512_mask_cvtneps2bf16
+__m256bh test_mm512_mask_cvtneps_pbh(__m256bh C, __mmask16 U, __m512 A) {
+  // CHECK-LABEL: @test_mm512_mask_cvtneps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512
   // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}
   // CHECK: ret <16 x i16> %{{.*}}
   return _mm512_mask_cvtneps_pbh(C, U, A);
 }
 
-__m256bh test_mm512_maskz_cvtneps2bf16(__m512 A, __mmask16 U) {
-  // CHECK-LABEL: @test_mm512_maskz_cvtneps2bf16
+__m256bh test_mm512_maskz_cvtneps_pbh(__m512 A, __mmask16 U) {
+  // CHECK-LABEL: @test_mm512_maskz_cvtneps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512
   // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}
   // CHECK: ret <16 x i16> %{{.*}}
@@ -72,3 +81,32 

[PATCH] D62115: fix a issue that clang is incompatible with gcc with -H option.

2019-06-07 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 203664.
skan added a comment.

make macro more compact


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62115/new/

https://reviews.llvm.org/D62115

Files:
  lib/Frontend/HeaderIncludeGen.cpp
  test/Frontend/clang_H_opt.c


Index: test/Frontend/clang_H_opt.c
===
--- /dev/null
+++ test/Frontend/clang_H_opt.c
@@ -0,0 +1,41 @@
+// RUN: %clang -H -fsyntax-only %s 2>&1 | FileCheck %s
+
+#include "../Index/Inputs/empty.h"
+#include "Inputs/empty.h"
+#include "./Inputs/empty.h"
+#include "././Inputs/empty.h"
+#include "./Inputs/empty.h"
+// CHECK: .
+// CHECK-SAME: ../Index/Inputs/empty.h
+// CHECK: .
+// CHECK-SAME: Inputs/empty.h
+// CHECK: .
+// CHECK-SAME: ./Inputs/empty.h
+// CHECK: .
+// CHECK-SAME: ././Inputs/empty.h
+// CHECK: .
+// CHECK-SAME: ./Inputs/empty.h
+
+#if defined(_WIN32) || defined(_WIN64)
+#include "..\Index\Inputs\empty.h"
+#include "Inputs\empty.h"
+#include ".\Inputs\empty.h"
+#include ".\.\Inputs\empty.h"
+#include ".\Inputs\empty.h"
+#else
+#include "../Index/Inputs/empty.h"
+#include "Inputs/empty.h"
+#include "./Inputs/empty.h"
+#include "././Inputs/empty.h"
+#include "./Inputs/empty.h"
+#endif
+// CHECK: .
+// CHECK-SAME: ..{{\/|}}Index{{\/|}}Inputs{{\/|}}empty.h
+// CHECK: .
+// CHECK-SAME: Inputs{{\/|}}empty.h
+// CHECK: .
+// CHECK-SAME: .{{\/|}}Inputs{{\/|}}empty.h
+// CHECK: .
+// CHECK-SAME: .{{\/|}}.{{\/|}}Inputs{{\/|}}empty.h
+// CHECK: .
+// CHECK-SAME: .{{\/|}}Inputs{{\/|}}empty.h
Index: lib/Frontend/HeaderIncludeGen.cpp
===
--- lib/Frontend/HeaderIncludeGen.cpp
+++ lib/Frontend/HeaderIncludeGen.cpp
@@ -51,6 +51,10 @@
 static void PrintHeaderInfo(raw_ostream *OutputFile, StringRef Filename,
 bool ShowDepth, unsigned CurrentIncludeDepth,
 bool MSStyle) {
+  // Simplify Filename that starts with "./"
+  if (Filename.startswith("./"))
+Filename = Filename.substr(2);
+
   // Write to a temporary string to avoid unnecessary flushing on errs().
   SmallString<512> Pathname(Filename);
   if (!MSStyle)


Index: test/Frontend/clang_H_opt.c
===
--- /dev/null
+++ test/Frontend/clang_H_opt.c
@@ -0,0 +1,41 @@
+// RUN: %clang -H -fsyntax-only %s 2>&1 | FileCheck %s
+
+#include "../Index/Inputs/empty.h"
+#include "Inputs/empty.h"
+#include "./Inputs/empty.h"
+#include "././Inputs/empty.h"
+#include "./Inputs/empty.h"
+// CHECK: .
+// CHECK-SAME: ../Index/Inputs/empty.h
+// CHECK: .
+// CHECK-SAME: Inputs/empty.h
+// CHECK: .
+// CHECK-SAME: ./Inputs/empty.h
+// CHECK: .
+// CHECK-SAME: ././Inputs/empty.h
+// CHECK: .
+// CHECK-SAME: ./Inputs/empty.h
+
+#if defined(_WIN32) || defined(_WIN64)
+#include "..\Index\Inputs\empty.h"
+#include "Inputs\empty.h"
+#include ".\Inputs\empty.h"
+#include ".\.\Inputs\empty.h"
+#include ".\Inputs\empty.h"
+#else
+#include "../Index/Inputs/empty.h"
+#include "Inputs/empty.h"
+#include "./Inputs/empty.h"
+#include "././Inputs/empty.h"
+#include "./Inputs/empty.h"
+#endif
+// CHECK: .
+// CHECK-SAME: ..{{\/|}}Index{{\/|}}Inputs{{\/|}}empty.h
+// CHECK: .
+// CHECK-SAME: Inputs{{\/|}}empty.h
+// CHECK: .
+// CHECK-SAME: .{{\/|}}Inputs{{\/|}}empty.h
+// CHECK: .
+// CHECK-SAME: .{{\/|}}.{{\/|}}Inputs{{\/|}}empty.h
+// CHECK: .
+// CHECK-SAME: .{{\/|}}Inputs{{\/|}}empty.h
Index: lib/Frontend/HeaderIncludeGen.cpp
===
--- lib/Frontend/HeaderIncludeGen.cpp
+++ lib/Frontend/HeaderIncludeGen.cpp
@@ -51,6 +51,10 @@
 static void PrintHeaderInfo(raw_ostream *OutputFile, StringRef Filename,
 bool ShowDepth, unsigned CurrentIncludeDepth,
 bool MSStyle) {
+  // Simplify Filename that starts with "./"
+  if (Filename.startswith("./"))
+Filename = Filename.substr(2);
+
   // Write to a temporary string to avoid unnecessary flushing on errs().
   SmallString<512> Pathname(Filename);
   if (!MSStyle)
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D62363: [X86] Enable intrinsics that convert float and bf16 data to each other

2019-06-09 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 203762.
skan added a comment.

change mask paramater' s name from `__M` to `__U` in order to be consistent 
with other intrinsics in the file


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62363/new/

https://reviews.llvm.org/D62363

Files:
  include/clang/Basic/BuiltinsX86.def
  lib/CodeGen/CGBuiltin.cpp
  lib/Headers/avx512bf16intrin.h
  lib/Headers/avx512vlbf16intrin.h
  test/CodeGen/avx512bf16-builtins.c
  test/CodeGen/avx512vlbf16-builtins.c

Index: test/CodeGen/avx512vlbf16-builtins.c
===
--- test/CodeGen/avx512vlbf16-builtins.c
+++ test/CodeGen/avx512vlbf16-builtins.c
@@ -161,3 +161,39 @@
   // CHECK: ret <8 x float> %{{.*}}
   return _mm256_mask_dpbf16_ps(D, U, A, B);
 }
+
+__bfloat16 test_mm_cvtness_sbh(float A) {
+  // CHECK-LABEL: @test_mm_cvtness_sbh
+  // CHECK: @llvm.x86.avx512bf16.mask.cvtneps2bf16.128
+  // CHECK: ret i16 %{{.*}}
+  return _mm_cvtness_sbh(A);
+}
+
+__m256 test_mm256_cvtpbh_ps(__m128bh A) {
+  // CHECK-LABEL: @test_mm256_cvtpbh_ps
+  // CHECK: sext <8 x i16> %{{.*}} to <8 x i32>
+  // CHECK: @llvm.x86.avx2.pslli.d
+  // CHECK: bitcast <4 x i64> %{{.*}} to <8 x float>
+  // CHECK: ret <8 x float> %{{.*}}
+  return _mm256_cvtpbh_ps(A);
+}
+
+__m256 test_mm256_maskz_cvtpbh_ps(__mmask8 M, __m128bh A) {
+  // CHECK-LABEL: @test_mm256_maskz_cvtpbh_ps
+  // CHECK: sext <8 x i16> %{{.*}} to <8 x i32>
+  // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
+  // CHECK: @llvm.x86.avx2.pslli.d
+  // CHECK: bitcast <4 x i64> %{{.*}} to <8 x float>
+  // CHECK: ret <8 x float> %{{.*}}
+  return _mm256_maskz_cvtpbh_ps(M, A);
+}
+
+__m256 test_mm256_mask_cvtpbh_ps(__m256 S, __mmask8 M, __m128bh A) {
+  // CHECK-LABEL: @test_mm256_mask_cvtpbh_ps
+  // CHECK: sext <8 x i16> %{{.*}} to <8 x i32>
+  // CHECK: @llvm.x86.avx2.pslli.d
+  // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
+  // CHECK: bitcast <4 x i64> %{{.*}} to <8 x float>
+  // CHECK: ret <8 x float> %{{.*}}
+  return _mm256_mask_cvtpbh_ps(S, M, A);
+}
Index: test/CodeGen/avx512bf16-builtins.c
===
--- test/CodeGen/avx512bf16-builtins.c
+++ test/CodeGen/avx512bf16-builtins.c
@@ -4,46 +4,55 @@
 
 #include 
 
-__m512bh test_mm512_cvtne2ps2bf16(__m512 A, __m512 B) {
-  // CHECK-LABEL: @test_mm512_cvtne2ps2bf16
+float test_mm_cvtsbh_ss(__bfloat16 A) {
+  // CHECK-LABEL: @test_mm_cvtsbh_ss
+  // CHECK: zext i16 %{{.*}} to i32
+  // CHECK: shl i32 %{{.*}}, 16
+  // CHECK: bitcast i32 %{{.*}} to float
+  // CHECK: ret float %{{.*}}
+  return _mm_cvtsbh_ss(A);
+}
+
+__m512bh test_mm512_cvtne2ps_pbh(__m512 A, __m512 B) {
+  // CHECK-LABEL: @test_mm512_cvtne2ps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
   // CHECK: ret <32 x i16> %{{.*}}
   return _mm512_cvtne2ps_pbh(A, B);
 }
 
-__m512bh test_mm512_maskz_cvtne2ps2bf16(__m512 A, __m512 B, __mmask32 U) {
-  // CHECK-LABEL: @test_mm512_maskz_cvtne2ps2bf16
+__m512bh test_mm512_maskz_cvtne2ps_pbh(__m512 A, __m512 B, __mmask32 U) {
+  // CHECK-LABEL: @test_mm512_maskz_cvtne2ps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
   // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
   // CHECK: ret <32 x i16> %{{.*}}
   return _mm512_maskz_cvtne2ps_pbh(U, A, B);
 }
 
-__m512bh test_mm512_mask_cvtne2ps2bf16(__m512bh C, __mmask32 U, __m512 A, __m512 B) {
-  // CHECK-LABEL: @test_mm512_mask_cvtne2ps2bf16
+__m512bh test_mm512_mask_cvtne2ps_pbh(__m512bh C, __mmask32 U, __m512 A, __m512 B) {
+  // CHECK-LABEL: @test_mm512_mask_cvtne2ps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
   // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
   // CHECK: ret <32 x i16> %{{.*}}
   return _mm512_mask_cvtne2ps_pbh(C, U, A, B);
 }
 
-__m256bh test_mm512_cvtneps2bf16(__m512 A) {
-  // CHECK-LABEL: @test_mm512_cvtneps2bf16
+__m256bh test_mm512_cvtneps_pbh(__m512 A) {
+  // CHECK-LABEL: @test_mm512_cvtneps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512
   // CHECK: ret <16 x i16> %{{.*}}
   return _mm512_cvtneps_pbh(A);
 }
 
-__m256bh test_mm512_mask_cvtneps2bf16(__m256bh C, __mmask16 U, __m512 A) {
-  // CHECK-LABEL: @test_mm512_mask_cvtneps2bf16
+__m256bh test_mm512_mask_cvtneps_pbh(__m256bh C, __mmask16 U, __m512 A) {
+  // CHECK-LABEL: @test_mm512_mask_cvtneps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512
   // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}
   // CHECK: ret <16 x i16> %{{.*}}
   return _mm512_mask_cvtneps_pbh(C, U, A);
 }
 
-__m256bh test_mm512_maskz_cvtneps2bf16(__m512 A, __mmask16 U) {
-  // CHECK-LABEL: @test_mm512_maskz_cvtneps2bf16
+__m256bh test_mm512_maskz_cvtneps_pbh(__m512 A, __mmask16 U) {
+  // CHECK-LABEL: @test_mm512_maskz_cvtneps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512
   // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.

[PATCH] D62115: fix a issue that clang is incompatible with gcc with -H option.

2019-06-17 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 205001.
skan added a comment.

move test case to print-header-includes.c


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62115/new/

https://reviews.llvm.org/D62115

Files:
  lib/Frontend/HeaderIncludeGen.cpp
  test/Frontend/print-header-includes.c


Index: test/Frontend/print-header-includes.c
===
--- test/Frontend/print-header-includes.c
+++ test/Frontend/print-header-includes.c
@@ -29,4 +29,15 @@
 // MS-BLACKLIST: Note: including file:  {{[^ ]*test2.h}}
 // MS-BLACKLIST-NOT: Note
 
+// RUN: %clang_cc1 -H -fsyntax-only %s 2>&1 | FileCheck %s \
+// RUN: --check-prefix=GCC-STDOUT
+// GCC-STDOUT: .
+// GCC-STDOUT-SAME: Inputs{{\/|}}test.h
+// GCC-STDOUT: ..
+// GCC-STDOUT-SAME: Inputs{{\/|}}test2.h
+
+#if defined(_WIN32) || defined(_WIN64)
+#include "Inputs\test.h"
+#else
 #include "Inputs/test.h"
+#endif
Index: lib/Frontend/HeaderIncludeGen.cpp
===
--- lib/Frontend/HeaderIncludeGen.cpp
+++ lib/Frontend/HeaderIncludeGen.cpp
@@ -51,6 +51,10 @@
 static void PrintHeaderInfo(raw_ostream *OutputFile, StringRef Filename,
 bool ShowDepth, unsigned CurrentIncludeDepth,
 bool MSStyle) {
+  // Simplify Filename that starts with "./"
+  if (Filename.startswith("./"))
+Filename = Filename.substr(2);
+
   // Write to a temporary string to avoid unnecessary flushing on errs().
   SmallString<512> Pathname(Filename);
   if (!MSStyle)


Index: test/Frontend/print-header-includes.c
===
--- test/Frontend/print-header-includes.c
+++ test/Frontend/print-header-includes.c
@@ -29,4 +29,15 @@
 // MS-BLACKLIST: Note: including file:  {{[^ ]*test2.h}}
 // MS-BLACKLIST-NOT: Note
 
+// RUN: %clang_cc1 -H -fsyntax-only %s 2>&1 | FileCheck %s \
+// RUN: --check-prefix=GCC-STDOUT
+// GCC-STDOUT: .
+// GCC-STDOUT-SAME: Inputs{{\/|}}test.h
+// GCC-STDOUT: ..
+// GCC-STDOUT-SAME: Inputs{{\/|}}test2.h
+
+#if defined(_WIN32) || defined(_WIN64)
+#include "Inputs\test.h"
+#else
 #include "Inputs/test.h"
+#endif
Index: lib/Frontend/HeaderIncludeGen.cpp
===
--- lib/Frontend/HeaderIncludeGen.cpp
+++ lib/Frontend/HeaderIncludeGen.cpp
@@ -51,6 +51,10 @@
 static void PrintHeaderInfo(raw_ostream *OutputFile, StringRef Filename,
 bool ShowDepth, unsigned CurrentIncludeDepth,
 bool MSStyle) {
+  // Simplify Filename that starts with "./"
+  if (Filename.startswith("./"))
+Filename = Filename.substr(2);
+
   // Write to a temporary string to avoid unnecessary flushing on errs().
   SmallString<512> Pathname(Filename);
   if (!MSStyle)
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D62115: fix a issue that clang is incompatible with gcc with -H option.

2019-06-17 Thread Kan Shengchen via Phabricator via cfe-commits
skan added a comment.

In D62115#1538631 , @kimgr wrote:

> I think the test needs a bit more work. It's essentially checking the same 
> thing twice to exercise the Windows path separators.
>
> It looks like there's already a test for `-H` in 
> `FrontEnd/print-header-includes.c`. That also demonstrates the use of 
> `--check-prefix` to handle target-specific stuff. Maybe you could fold this 
> into there?


Done


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62115/new/

https://reviews.llvm.org/D62115



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D62115: fix a issue that clang is incompatible with gcc with -H option.

2019-06-18 Thread Kan Shengchen via Phabricator via cfe-commits
skan added a comment.

In D62115#1547698 , @kimgr wrote:

> This looks good to me, thanks!


Could you help accept this patch?


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62115/new/

https://reviews.llvm.org/D62115



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D62115: fix a issue that clang is incompatible with gcc with -H option.

2019-05-19 Thread Kan Shengchen via Phabricator via cfe-commits
skan created this revision.
skan added reviewers: xiangzhangllvm, LuoYuanke, craig.topper.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

clang behaves differently with gcc when compiling
a file with -H option, gcc will omit the "./", but
clang will not. I fix it to make clang more
compatible with gcc.


Repository:
  rC Clang

https://reviews.llvm.org/D62115

Files:
  lib/Frontend/HeaderIncludeGen.cpp
  test/Driver/clang_H_opt.c
  test/Driver/clang_H_opt.h


Index: test/Driver/clang_H_opt.h
===
--- /dev/null
+++ test/Driver/clang_H_opt.h
@@ -0,0 +1,2 @@
+// This header file is included by clang_H_opt.c It can not be deleted,
+// otherwise Clang will complain when compiling the clang_H_opt.c.
Index: test/Driver/clang_H_opt.c
===
--- /dev/null
+++ test/Driver/clang_H_opt.c
@@ -0,0 +1,6 @@
+// RUN: %clang -H -fsyntax-only %s 2>&1 | FileCheck %s
+
+#include"clang_H_opt.h"
+// CHECK: .
+// CHECK-NOT: ./
+// CHECK-SAME: clang_H_opt.h
Index: lib/Frontend/HeaderIncludeGen.cpp
===
--- lib/Frontend/HeaderIncludeGen.cpp
+++ lib/Frontend/HeaderIncludeGen.cpp
@@ -51,6 +51,10 @@
 static void PrintHeaderInfo(raw_ostream *OutputFile, StringRef Filename,
 bool ShowDepth, unsigned CurrentIncludeDepth,
 bool MSStyle) {
+  // Simplify Filename that starts with "./"
+  if (Filename.startswith("./"));
+Filename=Filename.substr(2);
+
   // Write to a temporary string to avoid unnecessary flushing on errs().
   SmallString<512> Pathname(Filename);
   if (!MSStyle)


Index: test/Driver/clang_H_opt.h
===
--- /dev/null
+++ test/Driver/clang_H_opt.h
@@ -0,0 +1,2 @@
+// This header file is included by clang_H_opt.c It can not be deleted,
+// otherwise Clang will complain when compiling the clang_H_opt.c.
Index: test/Driver/clang_H_opt.c
===
--- /dev/null
+++ test/Driver/clang_H_opt.c
@@ -0,0 +1,6 @@
+// RUN: %clang -H -fsyntax-only %s 2>&1 | FileCheck %s
+
+#include"clang_H_opt.h"
+// CHECK: .
+// CHECK-NOT: ./
+// CHECK-SAME: clang_H_opt.h
Index: lib/Frontend/HeaderIncludeGen.cpp
===
--- lib/Frontend/HeaderIncludeGen.cpp
+++ lib/Frontend/HeaderIncludeGen.cpp
@@ -51,6 +51,10 @@
 static void PrintHeaderInfo(raw_ostream *OutputFile, StringRef Filename,
 bool ShowDepth, unsigned CurrentIncludeDepth,
 bool MSStyle) {
+  // Simplify Filename that starts with "./"
+  if (Filename.startswith("./"));
+Filename=Filename.substr(2);
+
   // Write to a temporary string to avoid unnecessary flushing on errs().
   SmallString<512> Pathname(Filename);
   if (!MSStyle)
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D62115: fix a issue that clang is incompatible with gcc with -H option.

2019-05-20 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 200212.
skan added a comment.

remove ";" and format the code


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62115/new/

https://reviews.llvm.org/D62115

Files:
  lib/Frontend/HeaderIncludeGen.cpp
  test/Driver/clang_H_opt.c
  test/Driver/clang_H_opt.h


Index: test/Driver/clang_H_opt.h
===
--- /dev/null
+++ test/Driver/clang_H_opt.h
@@ -0,0 +1,2 @@
+// This header file is included by clang_H_opt.c. It can not be deleted,
+// otherwise Clang will complain when compiling the clang_H_opt.c.
Index: test/Driver/clang_H_opt.c
===
--- /dev/null
+++ test/Driver/clang_H_opt.c
@@ -0,0 +1,6 @@
+// RUN: %clang -H -fsyntax-only %s 2>&1 | FileCheck %s
+
+#include "clang_H_opt.h"
+// CHECK: .
+// CHECK-NOT: ./
+// CHECK-SAME: clang_H_opt.h
Index: lib/Frontend/HeaderIncludeGen.cpp
===
--- lib/Frontend/HeaderIncludeGen.cpp
+++ lib/Frontend/HeaderIncludeGen.cpp
@@ -51,6 +51,10 @@
 static void PrintHeaderInfo(raw_ostream *OutputFile, StringRef Filename,
 bool ShowDepth, unsigned CurrentIncludeDepth,
 bool MSStyle) {
+  // Simplify Filename that starts with "./"
+  if (Filename.startswith("./"))
+Filename = Filename.substr(2);
+
   // Write to a temporary string to avoid unnecessary flushing on errs().
   SmallString<512> Pathname(Filename);
   if (!MSStyle)


Index: test/Driver/clang_H_opt.h
===
--- /dev/null
+++ test/Driver/clang_H_opt.h
@@ -0,0 +1,2 @@
+// This header file is included by clang_H_opt.c. It can not be deleted,
+// otherwise Clang will complain when compiling the clang_H_opt.c.
Index: test/Driver/clang_H_opt.c
===
--- /dev/null
+++ test/Driver/clang_H_opt.c
@@ -0,0 +1,6 @@
+// RUN: %clang -H -fsyntax-only %s 2>&1 | FileCheck %s
+
+#include "clang_H_opt.h"
+// CHECK: .
+// CHECK-NOT: ./
+// CHECK-SAME: clang_H_opt.h
Index: lib/Frontend/HeaderIncludeGen.cpp
===
--- lib/Frontend/HeaderIncludeGen.cpp
+++ lib/Frontend/HeaderIncludeGen.cpp
@@ -51,6 +51,10 @@
 static void PrintHeaderInfo(raw_ostream *OutputFile, StringRef Filename,
 bool ShowDepth, unsigned CurrentIncludeDepth,
 bool MSStyle) {
+  // Simplify Filename that starts with "./"
+  if (Filename.startswith("./"))
+Filename = Filename.substr(2);
+
   // Write to a temporary string to avoid unnecessary flushing on errs().
   SmallString<512> Pathname(Filename);
   if (!MSStyle)
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D62115: fix a issue that clang is incompatible with gcc with -H option.

2019-05-20 Thread Kan Shengchen via Phabricator via cfe-commits
skan marked 2 inline comments as done.
skan added inline comments.



Comment at: lib/Frontend/HeaderIncludeGen.cpp:55
+  // Simplify Filename that starts with "./"
+  if (Filename.startswith("./"));
+Filename=Filename.substr(2);

lebedev.ri wrote:
> xiangzhangllvm wrote:
> > Need remove ";" ? 
> This was fixed but no test was added?
> Was some existing test failing previously? Which one?
The test is in the file 'clang_H_opt.c'  which is included in this patch.



Comment at: lib/Frontend/HeaderIncludeGen.cpp:56
+  if (Filename.startswith("./"));
+Filename=Filename.substr(2);
+

xbolva00 wrote:
> Formatting
formatting is done in updated patch.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62115/new/

https://reviews.llvm.org/D62115



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D62115: fix a issue that clang is incompatible with gcc with -H option.

2019-05-20 Thread Kan Shengchen via Phabricator via cfe-commits
skan marked an inline comment as done.
skan added inline comments.



Comment at: lib/Frontend/HeaderIncludeGen.cpp:55
+  // Simplify Filename that starts with "./"
+  if (Filename.startswith("./"));
+Filename=Filename.substr(2);

craig.topper wrote:
> skan wrote:
> > lebedev.ri wrote:
> > > xiangzhangllvm wrote:
> > > > Need remove ";" ? 
> > > This was fixed but no test was added?
> > > Was some existing test failing previously? Which one?
> > The test is in the file 'clang_H_opt.c'  which is included in this patch.
> The extra semicolon would have caused the body of the 'if' to execute 
> unconditionally. Did any existing test case fail for that in your local 
> testing? Or did you not test with that mistake?
i fixed the mistake in the updated patch.  I ran the test in 'clang_H_opt.c' 
alone for this patch. The extra semicolon caused the body of `if` to exeute 
always, which didn't cause the test to fail. 


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62115/new/

https://reviews.llvm.org/D62115



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D62115: fix a issue that clang is incompatible with gcc with -H option.

2019-05-21 Thread Kan Shengchen via Phabricator via cfe-commits
skan added a comment.

In D62115#1509536 , @kimgr wrote:

> Should you also consider Windows path separators here?


Do you mean "\\" separator? i build llvm on windows, and use clang to complie 
file with -H option. The output pathname also use "/" as path separator, so i 
think we don't need to consider the "\\" separator.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62115/new/

https://reviews.llvm.org/D62115



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D62115: fix a issue that clang is incompatible with gcc with -H option.

2019-05-21 Thread Kan Shengchen via Phabricator via cfe-commits
skan marked an inline comment as done.
skan added inline comments.



Comment at: lib/Frontend/HeaderIncludeGen.cpp:55
+  // Simplify Filename that starts with "./"
+  if (Filename.startswith("./"));
+Filename=Filename.substr(2);

lebedev.ri wrote:
> skan wrote:
> > craig.topper wrote:
> > > skan wrote:
> > > > lebedev.ri wrote:
> > > > > xiangzhangllvm wrote:
> > > > > > Need remove ";" ? 
> > > > > This was fixed but no test was added?
> > > > > Was some existing test failing previously? Which one?
> > > > The test is in the file 'clang_H_opt.c'  which is included in this 
> > > > patch.
> > > The extra semicolon would have caused the body of the 'if' to execute 
> > > unconditionally. Did any existing test case fail for that in your local 
> > > testing? Or did you not test with that mistake?
> > i fixed the mistake in the updated patch.  I ran the test in 
> > 'clang_H_opt.c' alone for this patch. The extra semicolon caused the body 
> > of `if` to exeute always, which didn't cause the test to fail. 
> > The extra semicolon caused the body of if to exeute always, which didn't 
> > cause the test to fail.
> 
> That is the question.
> Is there test coverage with that error?
No. I just run alll the tests for clang, and all of them can pass even if the 
extra semicolon exits. If we want to add  a test to cover that error, we have 
to add a headerfile outside the 'test/Driver' directory. Do we need to add the 
test to cover that error?


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62115/new/

https://reviews.llvm.org/D62115



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D62115: fix a issue that clang is incompatible with gcc with -H option.

2019-05-21 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 200634.
skan added a comment.

add a test for including headfile outside current directory.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62115/new/

https://reviews.llvm.org/D62115

Files:
  lib/Frontend/HeaderIncludeGen.cpp
  test/Frontend/clang_H_opt.c


Index: test/Frontend/clang_H_opt.c
===
--- /dev/null
+++ test/Frontend/clang_H_opt.c
@@ -0,0 +1,10 @@
+// RUN: %clang -H -fsyntax-only %s 2>&1 | FileCheck %s
+
+#include "../Index/Inputs/empty.h"
+#include "Inputs/empty.h"
+
+// CHECK: .
+// CHECK-SAME: ../Index/Inputs/empty.h
+// CHECK: .
+// CHECK-NOT: ./
+// CHECK-SAME: Inputs/empty.h
Index: lib/Frontend/HeaderIncludeGen.cpp
===
--- lib/Frontend/HeaderIncludeGen.cpp
+++ lib/Frontend/HeaderIncludeGen.cpp
@@ -51,6 +51,10 @@
 static void PrintHeaderInfo(raw_ostream *OutputFile, StringRef Filename,
 bool ShowDepth, unsigned CurrentIncludeDepth,
 bool MSStyle) {
+  // Simplify Filename that starts with "./"
+  if (Filename.startswith("./"))
+Filename = Filename.substr(2);
+
   // Write to a temporary string to avoid unnecessary flushing on errs().
   SmallString<512> Pathname(Filename);
   if (!MSStyle)


Index: test/Frontend/clang_H_opt.c
===
--- /dev/null
+++ test/Frontend/clang_H_opt.c
@@ -0,0 +1,10 @@
+// RUN: %clang -H -fsyntax-only %s 2>&1 | FileCheck %s
+
+#include "../Index/Inputs/empty.h"
+#include "Inputs/empty.h"
+
+// CHECK: .
+// CHECK-SAME: ../Index/Inputs/empty.h
+// CHECK: .
+// CHECK-NOT: ./
+// CHECK-SAME: Inputs/empty.h
Index: lib/Frontend/HeaderIncludeGen.cpp
===
--- lib/Frontend/HeaderIncludeGen.cpp
+++ lib/Frontend/HeaderIncludeGen.cpp
@@ -51,6 +51,10 @@
 static void PrintHeaderInfo(raw_ostream *OutputFile, StringRef Filename,
 bool ShowDepth, unsigned CurrentIncludeDepth,
 bool MSStyle) {
+  // Simplify Filename that starts with "./"
+  if (Filename.startswith("./"))
+Filename = Filename.substr(2);
+
   // Write to a temporary string to avoid unnecessary flushing on errs().
   SmallString<512> Pathname(Filename);
   if (!MSStyle)
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D62115: fix a issue that clang is incompatible with gcc with -H option.

2019-05-21 Thread Kan Shengchen via Phabricator via cfe-commits
skan marked an inline comment as done.
skan added inline comments.



Comment at: lib/Frontend/HeaderIncludeGen.cpp:55
+  // Simplify Filename that starts with "./"
+  if (Filename.startswith("./"));
+Filename=Filename.substr(2);

lebedev.ri wrote:
> skan wrote:
> > lebedev.ri wrote:
> > > skan wrote:
> > > > craig.topper wrote:
> > > > > skan wrote:
> > > > > > lebedev.ri wrote:
> > > > > > > xiangzhangllvm wrote:
> > > > > > > > Need remove ";" ? 
> > > > > > > This was fixed but no test was added?
> > > > > > > Was some existing test failing previously? Which one?
> > > > > > The test is in the file 'clang_H_opt.c'  which is included in this 
> > > > > > patch.
> > > > > The extra semicolon would have caused the body of the 'if' to execute 
> > > > > unconditionally. Did any existing test case fail for that in your 
> > > > > local testing? Or did you not test with that mistake?
> > > > i fixed the mistake in the updated patch.  I ran the test in 
> > > > 'clang_H_opt.c' alone for this patch. The extra semicolon caused the 
> > > > body of `if` to exeute always, which didn't cause the test to fail. 
> > > > The extra semicolon caused the body of if to exeute always, which 
> > > > didn't cause the test to fail.
> > > 
> > > That is the question.
> > > Is there test coverage with that error?
> > No. I just run alll the tests for clang, and all of them can pass even if 
> > the extra semicolon exits. If we want to add  a test to cover that error, 
> > we have to add a headerfile outside the 'test/Driver' directory. Do we need 
> > to add the test to cover that error?
> Then yes please, do add test coverage for that bug :)
test for that bug has been added in the new patch


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62115/new/

https://reviews.llvm.org/D62115



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D62115: fix a issue that clang is incompatible with gcc with -H option.

2019-05-22 Thread Kan Shengchen via Phabricator via cfe-commits
skan added a comment.

In D62115#1511407 , @kimgr wrote:

> Also, consider `././Inputs/empty.h`.


Firstly, on linux
write the `clang_H_opt.c` file as

  #include "../Index/Inputs/empty.h"
  #include "Inputs/empty.h"
  #include "./Inputs/empty.h"
  #include "././Inputs/empty.h"

Then compile it with command `gcc -H -fsyntax-only clang_H_opt.c 2>&1`, 
output:

  . ../Index/Inputs/empty.h
  . Inputs/empty.h
  . ./Inputs/empty.h
  . ././Inputs/empty.h

compile it with command `clang -H -fsyntax-only clang_H_opt.c 2>&1` will get 
the same result . So i think there is no need to simplify the existing pathname 
in `#include` directive.

Secondly, on Win2019
write the `clang_H_opt.c` file as

  #include "..\Index\Inputs\empty.h"
  #include "Inputs/empty.h"
  #include ".\Inputs/empty.h"
  #include ".\.\Inputs/empty.h"

compile it with clang,
output:

  . ..\\Index\\Inputs\\empty.h
  . Inputs\\empty.h
  . .\\Inputs\\empty.h
  . .\\.\\Inputs\\empty.h
  . .\\.\\Inputs\\empty.h

i think the output is appropriate.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62115/new/

https://reviews.llvm.org/D62115



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D62115: fix a issue that clang is incompatible with gcc with -H option.

2019-05-23 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 200878.
skan added a comment.

make test case  consider Windows path separators


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62115/new/

https://reviews.llvm.org/D62115

Files:
  lib/Frontend/HeaderIncludeGen.cpp
  test/Frontend/clang_H_opt.c


Index: test/Frontend/clang_H_opt.c
===
--- /dev/null
+++ test/Frontend/clang_H_opt.c
@@ -0,0 +1,41 @@
+// RUN: %clang -H -fsyntax-only %s 2>&1 | FileCheck %s
+
+#include "../Index/Inputs/empty.h"
+#include "Inputs/empty.h"
+#include "./Inputs/empty.h"
+#include "././Inputs/empty.h"
+#include "./Inputs/empty.h"
+// CHECK: .
+// CHECK-SAME: ../Index/Inputs/empty.h
+// CHECK: .
+// CHECK-SAME: Inputs/empty.h
+// CHECK: .
+// CHECK-SAME: ./Inputs/empty.h
+// CHECK: .
+// CHECK-SAME: ././Inputs/empty.h
+// CHECK: .
+// CHECK-SAME: ./Inputs/empty.h
+
+#if defined(_WIN32) || defined(_WIN64)
+#include "..\Index\Inputs\empty.h"
+#include "Inputs\empty.h"
+#include ".\Inputs\empty.h"
+#include ".\.\Inputs\empty.h"
+#include ".\Inputs\empty.h"
+#else
+#include "../Index/Inputs/empty.h"
+#include "Inputs/empty.h"
+#include "./Inputs/empty.h"
+#include "././Inputs/empty.h"
+#include "./Inputs/empty.h"
+// CHECK: .
+// CHECK-SAME: ..{{\/|}}Index{{\/|}}Inputs{{\/|}}empty.h
+// CHECK: .
+// CHECK-SAME: Inputs{{\/|}}empty.h
+// CHECK: .
+// CHECK-SAME: .{{\/|}}Inputs{{\/|}}empty.h
+// CHECK: .
+// CHECK-SAME: .{{\/|}}.{{\/|}}Inputs{{\/|}}empty.h
+// CHECK: .
+// CHECK-SAME: .{{\/|}}Inputs{{\/|}}empty.h
+#endif
Index: lib/Frontend/HeaderIncludeGen.cpp
===
--- lib/Frontend/HeaderIncludeGen.cpp
+++ lib/Frontend/HeaderIncludeGen.cpp
@@ -51,6 +51,10 @@
 static void PrintHeaderInfo(raw_ostream *OutputFile, StringRef Filename,
 bool ShowDepth, unsigned CurrentIncludeDepth,
 bool MSStyle) {
+  // Simplify Filename that starts with "./"
+  if (Filename.startswith("./"))
+Filename = Filename.substr(2);
+
   // Write to a temporary string to avoid unnecessary flushing on errs().
   SmallString<512> Pathname(Filename);
   if (!MSStyle)


Index: test/Frontend/clang_H_opt.c
===
--- /dev/null
+++ test/Frontend/clang_H_opt.c
@@ -0,0 +1,41 @@
+// RUN: %clang -H -fsyntax-only %s 2>&1 | FileCheck %s
+
+#include "../Index/Inputs/empty.h"
+#include "Inputs/empty.h"
+#include "./Inputs/empty.h"
+#include "././Inputs/empty.h"
+#include "./Inputs/empty.h"
+// CHECK: .
+// CHECK-SAME: ../Index/Inputs/empty.h
+// CHECK: .
+// CHECK-SAME: Inputs/empty.h
+// CHECK: .
+// CHECK-SAME: ./Inputs/empty.h
+// CHECK: .
+// CHECK-SAME: ././Inputs/empty.h
+// CHECK: .
+// CHECK-SAME: ./Inputs/empty.h
+
+#if defined(_WIN32) || defined(_WIN64)
+#include "..\Index\Inputs\empty.h"
+#include "Inputs\empty.h"
+#include ".\Inputs\empty.h"
+#include ".\.\Inputs\empty.h"
+#include ".\Inputs\empty.h"
+#else
+#include "../Index/Inputs/empty.h"
+#include "Inputs/empty.h"
+#include "./Inputs/empty.h"
+#include "././Inputs/empty.h"
+#include "./Inputs/empty.h"
+// CHECK: .
+// CHECK-SAME: ..{{\/|}}Index{{\/|}}Inputs{{\/|}}empty.h
+// CHECK: .
+// CHECK-SAME: Inputs{{\/|}}empty.h
+// CHECK: .
+// CHECK-SAME: .{{\/|}}Inputs{{\/|}}empty.h
+// CHECK: .
+// CHECK-SAME: .{{\/|}}.{{\/|}}Inputs{{\/|}}empty.h
+// CHECK: .
+// CHECK-SAME: .{{\/|}}Inputs{{\/|}}empty.h
+#endif
Index: lib/Frontend/HeaderIncludeGen.cpp
===
--- lib/Frontend/HeaderIncludeGen.cpp
+++ lib/Frontend/HeaderIncludeGen.cpp
@@ -51,6 +51,10 @@
 static void PrintHeaderInfo(raw_ostream *OutputFile, StringRef Filename,
 bool ShowDepth, unsigned CurrentIncludeDepth,
 bool MSStyle) {
+  // Simplify Filename that starts with "./"
+  if (Filename.startswith("./"))
+Filename = Filename.substr(2);
+
   // Write to a temporary string to avoid unnecessary flushing on errs().
   SmallString<512> Pathname(Filename);
   if (!MSStyle)
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D62363: Enable intrinsics that convert float and bf16 data to each other

2019-05-23 Thread Kan Shengchen via Phabricator via cfe-commits
skan created this revision.
skan added reviewers: xiangzhangllvm, LuoYuanke, craig.topper.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Scalar version : 
 `_mm_cvtsbh_ss`  , `_mm_cvtness_sbh`

Vector version:
`_mm512_cvtpbh_ps` , `_mm256_cvtpbh_ps`
`_mm512_maskz_cvtpbh_ps` , `_mm256_maskz_cvtpbh_ps`
`_mm512_mask_cvtpbh_ps` , `_mm256_mask_cvtpbh_ps`


Repository:
  rC Clang

https://reviews.llvm.org/D62363

Files:
  include/clang/Basic/BuiltinsX86.def
  lib/CodeGen/CGBuiltin.cpp
  lib/Headers/avx512bf16intrin.h
  test/CodeGen/avx512bf16-builtins.c

Index: test/CodeGen/avx512bf16-builtins.c
===
--- test/CodeGen/avx512bf16-builtins.c
+++ test/CodeGen/avx512bf16-builtins.c
@@ -4,46 +4,64 @@
 
 #include 
 
-__m512bh test_mm512_cvtne2ps2bf16(__m512 A, __m512 B) {
-  // CHECK-LABEL: @test_mm512_cvtne2ps2bf16
+float test_mm_cvtsbh_ss(__bfloat16 A) {
+  // CHECK-LABEL: @test_mm_cvtsbh_ss
+  // CHECK: zext i16 %{{.*}} to i32
+  // CHECK: shl i32 %{{.*}}, 16
+  // CHECK: bitcast i32 %{{.*}} to float
+  // CHECK: ret float %{{.*}}
+  return _mm_cvtsbh_ss(A);
+}
+
+__bfloat16 test_mm_cvtness_sbh(float A) {
+  // CHECK-LABEL: @test_mm_cvtness_sbh
+  // CHECK: bitcast float %{{.*}} to i32
+  // CHECK: lshr i32 %{{.*}}, 16
+  // CHECK: trunc i32 %{{.*}} to i16
+  // CHECK: ret i16 %{{.*}}
+  return _mm_cvtness_sbh(A);
+}
+
+__m512bh test_mm512_cvtne2ps_pbh(__m512 A, __m512 B) {
+  // CHECK-LABEL: @test_mm512_cvtne2ps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
   // CHECK: ret <32 x i16> %{{.*}}
   return _mm512_cvtne2ps_pbh(A, B);
 }
 
-__m512bh test_mm512_maskz_cvtne2ps2bf16(__m512 A, __m512 B, __mmask32 U) {
-  // CHECK-LABEL: @test_mm512_maskz_cvtne2ps2bf16
+__m512bh test_mm512_maskz_cvtne2ps_pbh(__m512 A, __m512 B, __mmask32 U) {
+  // CHECK-LABEL: @test_mm512_maskz_cvtne2ps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
   // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
   // CHECK: ret <32 x i16> %{{.*}}
   return _mm512_maskz_cvtne2ps_pbh(U, A, B);
 }
 
-__m512bh test_mm512_mask_cvtne2ps2bf16(__m512bh C, __mmask32 U, __m512 A, __m512 B) {
-  // CHECK-LABEL: @test_mm512_mask_cvtne2ps2bf16
+__m512bh test_mm512_mask_cvtne2ps_pbh(__m512bh C, __mmask32 U, __m512 A, __m512 B) {
+  // CHECK-LABEL: @test_mm512_mask_cvtne2ps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
   // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
   // CHECK: ret <32 x i16> %{{.*}}
   return _mm512_mask_cvtne2ps_pbh(C, U, A, B);
 }
 
-__m256bh test_mm512_cvtneps2bf16(__m512 A) {
-  // CHECK-LABEL: @test_mm512_cvtneps2bf16
+__m256bh test_mm512_cvtneps_pbh(__m512 A) {
+  // CHECK-LABEL: @test_mm512_cvtneps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512
   // CHECK: ret <16 x i16> %{{.*}}
   return _mm512_cvtneps_pbh(A);
 }
 
-__m256bh test_mm512_mask_cvtneps2bf16(__m256bh C, __mmask16 U, __m512 A) {
-  // CHECK-LABEL: @test_mm512_mask_cvtneps2bf16
+__m256bh test_mm512_mask_cvtneps_pbh(__m256bh C, __mmask16 U, __m512 A) {
+  // CHECK-LABEL: @test_mm512_mask_cvtneps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512
   // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}
   // CHECK: ret <16 x i16> %{{.*}}
   return _mm512_mask_cvtneps_pbh(C, U, A);
 }
 
-__m256bh test_mm512_maskz_cvtneps2bf16(__m512 A, __mmask16 U) {
-  // CHECK-LABEL: @test_mm512_maskz_cvtneps2bf16
+__m256bh test_mm512_maskz_cvtneps_pbh(__m512 A, __mmask16 U) {
+  // CHECK-LABEL: @test_mm512_maskz_cvtneps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512
   // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}
   // CHECK: ret <16 x i16> %{{.*}}
@@ -72,3 +90,61 @@
   // CHECK: ret <16 x float> %{{.*}}
   return _mm512_mask_dpbf16_ps(D, U, A, B);
 }
+
+__m512 test_mm512_cvtpbh_ps(__m256bh A) {
+  // CHECK-LABEL: @test_mm512_cvtpbh_ps
+  // CHECK: sext <16 x i16> %{{.*}} to <16 x i32>
+  // CHECK: @llvm.x86.avx512.pslli.d.512
+  // CHECK: bitcast <8 x i64> %{{.*}} to <16 x float>
+  // CHECK: ret <16 x float> %{{.*}}
+  return _mm512_cvtpbh_ps(A);
+}
+
+__m256 test_mm256_cvtpbh_ps(__m128bh A) {
+  // CHECK-LABEL: @test_mm256_cvtpbh_ps
+  // CHECK: sext <8 x i16> %{{.*}} to <8 x i32>
+  // CHECK: @llvm.x86.avx2.pslli.d
+  // CHECK: bitcast <4 x i64> %{{.*}} to <8 x float>
+  // CHECK: ret <8 x float> %{{.*}}
+  return _mm256_cvtpbh_ps(A);
+}
+
+__m512 test_mm512_maskz_cvtpbh_ps(__mmask16 M, __m256bh A) {
+  // CHECK-LABEL: @test_mm512_maskz_cvtpbh_ps
+  // CHECK: sext <16 x i16> %{{.*}} to <16 x i32>
+  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
+  // CHECK: @llvm.x86.avx512.pslli.d.512
+  // CHECK: bitcast <8 x i64> %{{.*}} to <16 x float>
+  // CHECK: ret <16 x float> %{{.*}}
+  return _mm512_maskz_cvtpbh_ps(M, A);
+}
+
+__m256 test_mm256_maskz_cvtpbh_ps(__mmask8 M, __m128bh A) {
+  // CHECK-LABEL: @test_mm256_maskz_cvtpbh

[PATCH] D62363: [X86] Enable intrinsics that convert float and bf16 data to each other

2019-05-27 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 201601.
skan added a comment.

rm clang-format fix in this patch


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62363/new/

https://reviews.llvm.org/D62363

Files:
  include/clang/Basic/BuiltinsX86.def
  lib/CodeGen/CGBuiltin.cpp
  lib/Headers/avx512bf16intrin.h
  test/CodeGen/avx512bf16-builtins.c

Index: test/CodeGen/avx512bf16-builtins.c
===
--- test/CodeGen/avx512bf16-builtins.c
+++ test/CodeGen/avx512bf16-builtins.c
@@ -4,46 +4,64 @@
 
 #include 
 
-__m512bh test_mm512_cvtne2ps2bf16(__m512 A, __m512 B) {
-  // CHECK-LABEL: @test_mm512_cvtne2ps2bf16
+float test_mm_cvtsbh_ss(__bfloat16 A) {
+  // CHECK-LABEL: @test_mm_cvtsbh_ss
+  // CHECK: zext i16 %{{.*}} to i32
+  // CHECK: shl i32 %{{.*}}, 16
+  // CHECK: bitcast i32 %{{.*}} to float
+  // CHECK: ret float %{{.*}}
+  return _mm_cvtsbh_ss(A);
+}
+
+__bfloat16 test_mm_cvtness_sbh(float A) {
+  // CHECK-LABEL: @test_mm_cvtness_sbh
+  // CHECK: bitcast float %{{.*}} to i32
+  // CHECK: lshr i32 %{{.*}}, 16
+  // CHECK: trunc i32 %{{.*}} to i16
+  // CHECK: ret i16 %{{.*}}
+  return _mm_cvtness_sbh(A);
+}
+
+__m512bh test_mm512_cvtne2ps_pbh(__m512 A, __m512 B) {
+  // CHECK-LABEL: @test_mm512_cvtne2ps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
   // CHECK: ret <32 x i16> %{{.*}}
   return _mm512_cvtne2ps_pbh(A, B);
 }
 
-__m512bh test_mm512_maskz_cvtne2ps2bf16(__m512 A, __m512 B, __mmask32 U) {
-  // CHECK-LABEL: @test_mm512_maskz_cvtne2ps2bf16
+__m512bh test_mm512_maskz_cvtne2ps_pbh(__m512 A, __m512 B, __mmask32 U) {
+  // CHECK-LABEL: @test_mm512_maskz_cvtne2ps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
   // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
   // CHECK: ret <32 x i16> %{{.*}}
   return _mm512_maskz_cvtne2ps_pbh(U, A, B);
 }
 
-__m512bh test_mm512_mask_cvtne2ps2bf16(__m512bh C, __mmask32 U, __m512 A, __m512 B) {
-  // CHECK-LABEL: @test_mm512_mask_cvtne2ps2bf16
+__m512bh test_mm512_mask_cvtne2ps_pbh(__m512bh C, __mmask32 U, __m512 A, __m512 B) {
+  // CHECK-LABEL: @test_mm512_mask_cvtne2ps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
   // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
   // CHECK: ret <32 x i16> %{{.*}}
   return _mm512_mask_cvtne2ps_pbh(C, U, A, B);
 }
 
-__m256bh test_mm512_cvtneps2bf16(__m512 A) {
-  // CHECK-LABEL: @test_mm512_cvtneps2bf16
+__m256bh test_mm512_cvtneps_pbh(__m512 A) {
+  // CHECK-LABEL: @test_mm512_cvtneps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512
   // CHECK: ret <16 x i16> %{{.*}}
   return _mm512_cvtneps_pbh(A);
 }
 
-__m256bh test_mm512_mask_cvtneps2bf16(__m256bh C, __mmask16 U, __m512 A) {
-  // CHECK-LABEL: @test_mm512_mask_cvtneps2bf16
+__m256bh test_mm512_mask_cvtneps_pbh(__m256bh C, __mmask16 U, __m512 A) {
+  // CHECK-LABEL: @test_mm512_mask_cvtneps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512
   // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}
   // CHECK: ret <16 x i16> %{{.*}}
   return _mm512_mask_cvtneps_pbh(C, U, A);
 }
 
-__m256bh test_mm512_maskz_cvtneps2bf16(__m512 A, __mmask16 U) {
-  // CHECK-LABEL: @test_mm512_maskz_cvtneps2bf16
+__m256bh test_mm512_maskz_cvtneps_pbh(__m512 A, __mmask16 U) {
+  // CHECK-LABEL: @test_mm512_maskz_cvtneps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512
   // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}
   // CHECK: ret <16 x i16> %{{.*}}
@@ -72,3 +90,61 @@
   // CHECK: ret <16 x float> %{{.*}}
   return _mm512_mask_dpbf16_ps(D, U, A, B);
 }
+
+__m512 test_mm512_cvtpbh_ps(__m256bh A) {
+  // CHECK-LABEL: @test_mm512_cvtpbh_ps
+  // CHECK: sext <16 x i16> %{{.*}} to <16 x i32>
+  // CHECK: @llvm.x86.avx512.pslli.d.512
+  // CHECK: bitcast <8 x i64> %{{.*}} to <16 x float>
+  // CHECK: ret <16 x float> %{{.*}}
+  return _mm512_cvtpbh_ps(A);
+}
+
+__m256 test_mm256_cvtpbh_ps(__m128bh A) {
+  // CHECK-LABEL: @test_mm256_cvtpbh_ps
+  // CHECK: sext <8 x i16> %{{.*}} to <8 x i32>
+  // CHECK: @llvm.x86.avx2.pslli.d
+  // CHECK: bitcast <4 x i64> %{{.*}} to <8 x float>
+  // CHECK: ret <8 x float> %{{.*}}
+  return _mm256_cvtpbh_ps(A);
+}
+
+__m512 test_mm512_maskz_cvtpbh_ps(__mmask16 M, __m256bh A) {
+  // CHECK-LABEL: @test_mm512_maskz_cvtpbh_ps
+  // CHECK: sext <16 x i16> %{{.*}} to <16 x i32>
+  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
+  // CHECK: @llvm.x86.avx512.pslli.d.512
+  // CHECK: bitcast <8 x i64> %{{.*}} to <16 x float>
+  // CHECK: ret <16 x float> %{{.*}}
+  return _mm512_maskz_cvtpbh_ps(M, A);
+}
+
+__m256 test_mm256_maskz_cvtpbh_ps(__mmask8 M, __m128bh A) {
+  // CHECK-LABEL: @test_mm256_maskz_cvtpbh_ps
+  // CHECK: sext <8 x i16> %{{.*}} to <8 x i32>
+  // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
+  // CHECK: @llvm.x86.avx2.pslli.d
+  // CHECK: bitcast <4 x i64> %{{.*}} to <8 x float>
+  // CHECK: ret <

[PATCH] D62363: [X86] Enable intrinsics that convert float and bf16 data to each other

2019-05-27 Thread Kan Shengchen via Phabricator via cfe-commits
skan marked 3 inline comments as done.
skan added inline comments.



Comment at: lib/Headers/avx512bf16intrin.h:52
+///
+/// \headerfile
+///

RKSimon wrote:
> \headerfile 
fixed in updated patch



Comment at: lib/Headers/avx512bf16intrin.h:66
+///
+/// \headerfile
+///

RKSimon wrote:
> \headerfile 
fixed in updated patch



Comment at: lib/Headers/avx512bf16intrin.h:98
+  return (__m512bh)__builtin_ia32_selectw_512(
+  (__mmask32)__U, (__v32hi)_mm512_cvtne2ps_pbh(__A, __B), (__v32hi)__W);
 }

RKSimon wrote:
> style/clang-format changes like these should be separated into their own patch
style changes are removed in the updated patch


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62363/new/

https://reviews.llvm.org/D62363



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D62363: [X86] Enable intrinsics that convert float and bf16 data to each other

2019-05-27 Thread Kan Shengchen via Phabricator via cfe-commits
skan marked an inline comment as done.
skan added inline comments.



Comment at: lib/Headers/avx512bf16intrin.h:37
+///
+/// This intrinsic corresponds to the  EmitX86CvtBF16ToFloatExpr 
+/// function.

craig.topper wrote:
> This needs to be a comment that's useful to user's of the compiler not 
> compiler developers. It can't reference an implementation function inside the 
> compiler
i can not think out a comment that 's needed  by users since other comments has 
explained this function clearly, can i just remove this comment?


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62363/new/

https://reviews.llvm.org/D62363



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D62363: [X86] Enable intrinsics that convert float and bf16 data to each other

2019-05-27 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 201605.
skan added a comment.

make comments for  `_mm_cvtsbh_ss` and  `_mm_cvtness_sbh` better


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62363/new/

https://reviews.llvm.org/D62363

Files:
  include/clang/Basic/BuiltinsX86.def
  lib/CodeGen/CGBuiltin.cpp
  lib/Headers/avx512bf16intrin.h
  test/CodeGen/avx512bf16-builtins.c

Index: test/CodeGen/avx512bf16-builtins.c
===
--- test/CodeGen/avx512bf16-builtins.c
+++ test/CodeGen/avx512bf16-builtins.c
@@ -4,46 +4,64 @@
 
 #include 
 
-__m512bh test_mm512_cvtne2ps2bf16(__m512 A, __m512 B) {
-  // CHECK-LABEL: @test_mm512_cvtne2ps2bf16
+float test_mm_cvtsbh_ss(__bfloat16 A) {
+  // CHECK-LABEL: @test_mm_cvtsbh_ss
+  // CHECK: zext i16 %{{.*}} to i32
+  // CHECK: shl i32 %{{.*}}, 16
+  // CHECK: bitcast i32 %{{.*}} to float
+  // CHECK: ret float %{{.*}}
+  return _mm_cvtsbh_ss(A);
+}
+
+__bfloat16 test_mm_cvtness_sbh(float A) {
+  // CHECK-LABEL: @test_mm_cvtness_sbh
+  // CHECK: bitcast float %{{.*}} to i32
+  // CHECK: lshr i32 %{{.*}}, 16
+  // CHECK: trunc i32 %{{.*}} to i16
+  // CHECK: ret i16 %{{.*}}
+  return _mm_cvtness_sbh(A);
+}
+
+__m512bh test_mm512_cvtne2ps_pbh(__m512 A, __m512 B) {
+  // CHECK-LABEL: @test_mm512_cvtne2ps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
   // CHECK: ret <32 x i16> %{{.*}}
   return _mm512_cvtne2ps_pbh(A, B);
 }
 
-__m512bh test_mm512_maskz_cvtne2ps2bf16(__m512 A, __m512 B, __mmask32 U) {
-  // CHECK-LABEL: @test_mm512_maskz_cvtne2ps2bf16
+__m512bh test_mm512_maskz_cvtne2ps_pbh(__m512 A, __m512 B, __mmask32 U) {
+  // CHECK-LABEL: @test_mm512_maskz_cvtne2ps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
   // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
   // CHECK: ret <32 x i16> %{{.*}}
   return _mm512_maskz_cvtne2ps_pbh(U, A, B);
 }
 
-__m512bh test_mm512_mask_cvtne2ps2bf16(__m512bh C, __mmask32 U, __m512 A, __m512 B) {
-  // CHECK-LABEL: @test_mm512_mask_cvtne2ps2bf16
+__m512bh test_mm512_mask_cvtne2ps_pbh(__m512bh C, __mmask32 U, __m512 A, __m512 B) {
+  // CHECK-LABEL: @test_mm512_mask_cvtne2ps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
   // CHECK: select <32 x i1> %{{.*}}, <32 x i16> %{{.*}}, <32 x i16> %{{.*}}
   // CHECK: ret <32 x i16> %{{.*}}
   return _mm512_mask_cvtne2ps_pbh(C, U, A, B);
 }
 
-__m256bh test_mm512_cvtneps2bf16(__m512 A) {
-  // CHECK-LABEL: @test_mm512_cvtneps2bf16
+__m256bh test_mm512_cvtneps_pbh(__m512 A) {
+  // CHECK-LABEL: @test_mm512_cvtneps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512
   // CHECK: ret <16 x i16> %{{.*}}
   return _mm512_cvtneps_pbh(A);
 }
 
-__m256bh test_mm512_mask_cvtneps2bf16(__m256bh C, __mmask16 U, __m512 A) {
-  // CHECK-LABEL: @test_mm512_mask_cvtneps2bf16
+__m256bh test_mm512_mask_cvtneps_pbh(__m256bh C, __mmask16 U, __m512 A) {
+  // CHECK-LABEL: @test_mm512_mask_cvtneps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512
   // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}
   // CHECK: ret <16 x i16> %{{.*}}
   return _mm512_mask_cvtneps_pbh(C, U, A);
 }
 
-__m256bh test_mm512_maskz_cvtneps2bf16(__m512 A, __mmask16 U) {
-  // CHECK-LABEL: @test_mm512_maskz_cvtneps2bf16
+__m256bh test_mm512_maskz_cvtneps_pbh(__m512 A, __mmask16 U) {
+  // CHECK-LABEL: @test_mm512_maskz_cvtneps_pbh
   // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.512
   // CHECK: select <16 x i1> %{{.*}}, <16 x i16> %{{.*}}, <16 x i16> %{{.*}}
   // CHECK: ret <16 x i16> %{{.*}}
@@ -72,3 +90,61 @@
   // CHECK: ret <16 x float> %{{.*}}
   return _mm512_mask_dpbf16_ps(D, U, A, B);
 }
+
+__m512 test_mm512_cvtpbh_ps(__m256bh A) {
+  // CHECK-LABEL: @test_mm512_cvtpbh_ps
+  // CHECK: sext <16 x i16> %{{.*}} to <16 x i32>
+  // CHECK: @llvm.x86.avx512.pslli.d.512
+  // CHECK: bitcast <8 x i64> %{{.*}} to <16 x float>
+  // CHECK: ret <16 x float> %{{.*}}
+  return _mm512_cvtpbh_ps(A);
+}
+
+__m256 test_mm256_cvtpbh_ps(__m128bh A) {
+  // CHECK-LABEL: @test_mm256_cvtpbh_ps
+  // CHECK: sext <8 x i16> %{{.*}} to <8 x i32>
+  // CHECK: @llvm.x86.avx2.pslli.d
+  // CHECK: bitcast <4 x i64> %{{.*}} to <8 x float>
+  // CHECK: ret <8 x float> %{{.*}}
+  return _mm256_cvtpbh_ps(A);
+}
+
+__m512 test_mm512_maskz_cvtpbh_ps(__mmask16 M, __m256bh A) {
+  // CHECK-LABEL: @test_mm512_maskz_cvtpbh_ps
+  // CHECK: sext <16 x i16> %{{.*}} to <16 x i32>
+  // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
+  // CHECK: @llvm.x86.avx512.pslli.d.512
+  // CHECK: bitcast <8 x i64> %{{.*}} to <16 x float>
+  // CHECK: ret <16 x float> %{{.*}}
+  return _mm512_maskz_cvtpbh_ps(M, A);
+}
+
+__m256 test_mm256_maskz_cvtpbh_ps(__mmask8 M, __m128bh A) {
+  // CHECK-LABEL: @test_mm256_maskz_cvtpbh_ps
+  // CHECK: sext <8 x i16> %{{.*}} to <8 x i32>
+  // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
+  // CHECK: @llvm.x86.avx2.pslli.d
+  // CHECK: bitcast <4 x i64> %{{.*}} to

[PATCH] D62115: fix a issue that clang is incompatible with gcc with -H option.

2019-05-28 Thread Kan Shengchen via Phabricator via cfe-commits
skan added a comment.

ping


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62115/new/

https://reviews.llvm.org/D62115



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D80289: [Driver][X86] Support branch align options with LTO

2020-05-20 Thread Kan Shengchen via Phabricator via cfe-commits
skan created this revision.
Herald added subscribers: cfe-commits, dexonsmith, steven_wu, hiraditya, 
inglorion.
Herald added a project: clang.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D80289

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/lto.c

Index: clang/test/Driver/lto.c
===
--- clang/test/Driver/lto.c
+++ clang/test/Driver/lto.c
@@ -77,3 +77,20 @@
 //
 // CHECK-TUNING-LLDB:   "-plugin-opt=-debugger-tune=lldb"
 // CHECK-NO-TUNING-NOT: "-plugin-opt=-debugger-tune
+
+/// -flto passes along an explicit branch align argument.
+/// Test -malign-branch-boundary=
+// RUN: %clang -target x86_64-unknown-linux -malign-branch-boundary=16 -flto %s -### 2>&1 | FileCheck %s --check-prefix=BOUNDARY
+// BOUNDARY: "-plugin-opt=-x86-align-branch-boundary=16"
+
+/// Test -malign-branch=
+// RUN: %clang -target x86_64-unknown-linux -malign-branch=fused,jcc,jmp -flto %s -### %s 2>&1 | FileCheck %s --check-prefix=TYPE
+// TYPE: "-plugin-opt=-x86-align-branch=fused+jcc+jmp"
+
+/// Test -mpad-max-prefix-size=
+// RUN: %clang -target x86_64-unknown-linux -mpad-max-prefix-size=0 -flto %s -### 2>&1 | FileCheck %s --check-prefix=PREFIX-0
+// PREFIX-0: "-plugin-opt=-x86-pad-max-prefix-size=0"
+
+/// Test -mbranches-within-32B-boundaries
+// RUN: %clang -target x86_64-unknown-linux -mbranches-within-32B-boundaries -flto %s -### 2>&1 | FileCheck %s --check-prefix=32B
+// 32B: "-plugin-opt=-x86-branches-within-32B-boundaries"
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -358,6 +358,7 @@
   ArgStringList &CmdArgs, const InputInfo &Output,
   const InputInfo &Input, bool IsThinLTO) {
   const char *Linker = Args.MakeArgString(ToolChain.GetLinkerPath());
+  const Driver &D = ToolChain.getDriver();
   if (llvm::sys::path::filename(Linker) != "ld.lld" &&
   llvm::sys::path::stem(Linker) != "ld.lld") {
 // Tell the linker to load the plugin. This has to come before
@@ -374,10 +375,9 @@
 #endif
 
 SmallString<1024> Plugin;
-llvm::sys::path::native(Twine(ToolChain.getDriver().Dir) +
-"/../lib" CLANG_LIBDIR_SUFFIX "/LLVMgold" +
-Suffix,
-Plugin);
+llvm::sys::path::native(
+Twine(D.Dir) + "/../lib" CLANG_LIBDIR_SUFFIX "/LLVMgold" + Suffix,
+Plugin);
 CmdArgs.push_back(Args.MakeArgString(Plugin));
   }
 
@@ -417,7 +417,7 @@
   if (IsThinLTO)
 CmdArgs.push_back("-plugin-opt=thinlto");
 
-  StringRef Parallelism = getLTOParallelism(Args, ToolChain.getDriver());
+  StringRef Parallelism = getLTOParallelism(Args, D);
   if (!Parallelism.empty())
 CmdArgs.push_back(
 Args.MakeArgString("-plugin-opt=jobs=" + Twine(Parallelism)));
@@ -449,7 +449,7 @@
   if (Arg *A = getLastProfileSampleUseArg(Args)) {
 StringRef FName = A->getValue();
 if (!llvm::sys::fs::exists(FName))
-  ToolChain.getDriver().Diag(diag::err_drv_no_such_file) << FName;
+  D.Diag(diag::err_drv_no_such_file) << FName;
 else
   CmdArgs.push_back(
   Args.MakeArgString(Twine("-plugin-opt=sample-profile=") + FName));
@@ -492,11 +492,52 @@
   }
 
   // Setup statistics file output.
-  SmallString<128> StatsFile =
-  getStatsFileName(Args, Output, Input, ToolChain.getDriver());
+  SmallString<128> StatsFile = getStatsFileName(Args, Output, Input, D);
   if (!StatsFile.empty())
 CmdArgs.push_back(
 Args.MakeArgString(Twine("-plugin-opt=stats-file=") + StatsFile));
+
+  // Handle options for branch align
+  if (Args.hasArg(options::OPT_mbranches_within_32B_boundaries)) {
+CmdArgs.push_back("-plugin-opt=-x86-branches-within-32B-boundaries");
+  }
+  if (const Arg *A = Args.getLastArg(options::OPT_malign_branch_boundary_EQ)) {
+StringRef Value = A->getValue();
+unsigned Boundary;
+if (Value.getAsInteger(10, Boundary) || Boundary < 16 ||
+!llvm::isPowerOf2_64(Boundary)) {
+  D.Diag(diag::err_drv_invalid_argument_to_option)
+  << Value << A->getOption().getName();
+} else {
+  CmdArgs.push_back(Args.MakeArgString(
+  "-plugin-opt=-x86-align-branch-boundary=" + Twine(Boundary)));
+}
+  }
+  if (const Arg *A = Args.getLastArg(options::OPT_malign_branch_EQ)) {
+std::string AlignBranch;
+for (StringRef T : A->getValues()) {
+  if (T != "fused" && T != "jcc" && T != "jmp" && T != "call" &&
+  T != "ret" && T != "indirect")
+D.Diag(diag::err_drv_invalid_malign_branch_EQ)
+<< T << "fused, jcc, jmp, call, ret, indirect";
+  if (!AlignBranch.empty())
+AlignBranch += '+';
+  AlignBranch += T;
+}
+CmdArgs.push_back(Args.MakeArgString("-plugin-opt=-x86-align-branch=" +
+ 

[PATCH] D80289: [Driver][X86] Support branch align options with LTO

2020-05-20 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 265408.
skan marked an inline comment as done.
skan added a comment.

Move tests to x86-malign-branch.c


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D80289/new/

https://reviews.llvm.org/D80289

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/x86-malign-branch.c

Index: clang/test/Driver/x86-malign-branch.c
===
--- clang/test/Driver/x86-malign-branch.c
+++ clang/test/Driver/x86-malign-branch.c
@@ -1,8 +1,10 @@
-/// Test that -malign-branch* and -mbranches-within-32B-boundaries are parsed and converted to -mllvm options.
+/// Test that -malign-branch* and -mbranches-within-32B-boundaries are parsed and converted to MC options.
 
 /// Test -malign-branch-boundary=
 // RUN: %clang -target x86_64 -malign-branch-boundary=16 %s -c -### 2>&1 | FileCheck %s --check-prefix=BOUNDARY
 // BOUNDARY: "-mllvm" "-x86-align-branch-boundary=16"
+// RUN: %clang -target x86_64-unknown-linux -malign-branch-boundary=16 -flto %s -### 2>&1 | FileCheck %s --check-prefix=BOUNDARY-LTO
+// BOUNDARY-LTO: "-plugin-opt=-x86-align-branch-boundary=16"
 
 // RUN: %clang -target x86_64 -malign-branch-boundary=8 %s -c -### 2>&1 | FileCheck %s --check-prefix=BOUNDARY-ERR
 // RUN: %clang -target x86_64 -malign-branch-boundary=15 %s -c -### 2>&1 | FileCheck %s --check-prefix=BOUNDARY-ERR
@@ -13,6 +15,8 @@
 // TYPE0: "-mllvm" "-x86-align-branch=fused+jcc+jmp"
 // RUN: %clang -target x86_64 -malign-branch=fused,jcc,jmp,ret,call,indirect %s -c -### %s 2>&1 | FileCheck %s --check-prefix=TYPE1
 // TYPE1: "-mllvm" "-x86-align-branch=fused+jcc+jmp+ret+call+indirect"
+// RUN: %clang -target x86_64-unknown-linux -malign-branch=fused,jcc,jmp -flto %s -### %s 2>&1 | FileCheck %s --check-prefix=TYPE0-LTO
+// TYPE0-LTO: "-plugin-opt=-x86-align-branch=fused+jcc+jmp"
 
 // RUN: %clang -target x86_64 -malign-branch=fused,foo,bar %s -c -### %s 2>&1 | FileCheck %s --check-prefix=TYPE-ERR
 // TYPE-ERR: invalid argument 'foo' to -malign-branch=; each element must be one of: fused, jcc, jmp, call, ret, indirect
@@ -23,10 +27,14 @@
 // PREFIX-0: "-mllvm" "-x86-pad-max-prefix-size=0"
 // RUN: %clang -target x86_64 -mpad-max-prefix-size=15 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX-15
 // PREFIX-15: "-mllvm" "-x86-pad-max-prefix-size=15"
+// RUN: %clang -target x86_64-unknown-linux -mpad-max-prefix-size=0 -flto %s -### 2>&1 | FileCheck %s --check-prefix=PREFIX-0-LTO
+// PREFIX-0-LTO: "-plugin-opt=-x86-pad-max-prefix-size=0"
 
 /// Test -mbranches-within-32B-boundaries
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 | FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
+// RUN: %clang -target x86_64-unknown-linux -mbranches-within-32B-boundaries -flto %s -### 2>&1 | FileCheck %s --check-prefix=32B-LTO
+// 32B-LTO: "-plugin-opt=-x86-branches-within-32B-boundaries"
 
 /// Unsupported on other targets.
 // RUN: %clang -target aarch64 -malign-branch=jmp %s -c -### 2>&1 | FileCheck --check-prefix=UNUSED %s
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -358,6 +358,7 @@
   ArgStringList &CmdArgs, const InputInfo &Output,
   const InputInfo &Input, bool IsThinLTO) {
   const char *Linker = Args.MakeArgString(ToolChain.GetLinkerPath());
+  const Driver &D = ToolChain.getDriver();
   if (llvm::sys::path::filename(Linker) != "ld.lld" &&
   llvm::sys::path::stem(Linker) != "ld.lld") {
 // Tell the linker to load the plugin. This has to come before
@@ -374,10 +375,9 @@
 #endif
 
 SmallString<1024> Plugin;
-llvm::sys::path::native(Twine(ToolChain.getDriver().Dir) +
-"/../lib" CLANG_LIBDIR_SUFFIX "/LLVMgold" +
-Suffix,
-Plugin);
+llvm::sys::path::native(
+Twine(D.Dir) + "/../lib" CLANG_LIBDIR_SUFFIX "/LLVMgold" + Suffix,
+Plugin);
 CmdArgs.push_back(Args.MakeArgString(Plugin));
   }
 
@@ -417,7 +417,7 @@
   if (IsThinLTO)
 CmdArgs.push_back("-plugin-opt=thinlto");
 
-  StringRef Parallelism = getLTOParallelism(Args, ToolChain.getDriver());
+  StringRef Parallelism = getLTOParallelism(Args, D);
   if (!Parallelism.empty())
 CmdArgs.push_back(
 Args.MakeArgString("-plugin-opt=jobs=" + Twine(Parallelism)));
@@ -449,7 +449,7 @@
   if (Arg *A = getLastProfileSampleUseArg(Args)) {
 StringRef FName = A->getValue();
 if (!llvm::sys::fs::exists(FName))
-  ToolChain.getDriver().Diag(diag::err_drv_no_such_file) << FName;
+  D.Diag(diag::err_drv_no_such_file) << FName;
 else
   CmdArgs.push_back(
   Args.MakeArgString(Twine("-plugin-opt=sample-profile=") + FNam

[PATCH] D80289: [Driver][X86] Support branch align options with LTO

2020-05-20 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 265423.
skan marked an inline comment as done.
skan added a comment.

Refactor addX86AlignBranchArgs to be reused in CommonArgs.cpp


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D80289/new/

https://reviews.llvm.org/D80289

Files:
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/lib/Driver/ToolChains/CommonArgs.h
  clang/test/Driver/x86-malign-branch.c

Index: clang/test/Driver/x86-malign-branch.c
===
--- clang/test/Driver/x86-malign-branch.c
+++ clang/test/Driver/x86-malign-branch.c
@@ -1,8 +1,10 @@
-/// Test that -malign-branch* and -mbranches-within-32B-boundaries are parsed and converted to -mllvm options.
+/// Test that -malign-branch* and -mbranches-within-32B-boundaries are parsed and converted to MC options.
 
 /// Test -malign-branch-boundary=
 // RUN: %clang -target x86_64 -malign-branch-boundary=16 %s -c -### 2>&1 | FileCheck %s --check-prefix=BOUNDARY
 // BOUNDARY: "-mllvm" "-x86-align-branch-boundary=16"
+// RUN: %clang -target x86_64-unknown-linux -malign-branch-boundary=16 -flto %s -### 2>&1 | FileCheck %s --check-prefix=BOUNDARY-LTO
+// BOUNDARY-LTO: "-plugin-opt=-x86-align-branch-boundary=16"
 
 // RUN: %clang -target x86_64 -malign-branch-boundary=8 %s -c -### 2>&1 | FileCheck %s --check-prefix=BOUNDARY-ERR
 // RUN: %clang -target x86_64 -malign-branch-boundary=15 %s -c -### 2>&1 | FileCheck %s --check-prefix=BOUNDARY-ERR
@@ -13,6 +15,8 @@
 // TYPE0: "-mllvm" "-x86-align-branch=fused+jcc+jmp"
 // RUN: %clang -target x86_64 -malign-branch=fused,jcc,jmp,ret,call,indirect %s -c -### %s 2>&1 | FileCheck %s --check-prefix=TYPE1
 // TYPE1: "-mllvm" "-x86-align-branch=fused+jcc+jmp+ret+call+indirect"
+// RUN: %clang -target x86_64-unknown-linux -malign-branch=fused,jcc,jmp -flto %s -### %s 2>&1 | FileCheck %s --check-prefix=TYPE0-LTO
+// TYPE0-LTO: "-plugin-opt=-x86-align-branch=fused+jcc+jmp"
 
 // RUN: %clang -target x86_64 -malign-branch=fused,foo,bar %s -c -### %s 2>&1 | FileCheck %s --check-prefix=TYPE-ERR
 // TYPE-ERR: invalid argument 'foo' to -malign-branch=; each element must be one of: fused, jcc, jmp, call, ret, indirect
@@ -23,10 +27,14 @@
 // PREFIX-0: "-mllvm" "-x86-pad-max-prefix-size=0"
 // RUN: %clang -target x86_64 -mpad-max-prefix-size=15 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX-15
 // PREFIX-15: "-mllvm" "-x86-pad-max-prefix-size=15"
+// RUN: %clang -target x86_64-unknown-linux -mpad-max-prefix-size=0 -flto %s -### 2>&1 | FileCheck %s --check-prefix=PREFIX-0-LTO
+// PREFIX-0-LTO: "-plugin-opt=-x86-pad-max-prefix-size=0"
 
 /// Test -mbranches-within-32B-boundaries
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 | FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
+// RUN: %clang -target x86_64-unknown-linux -mbranches-within-32B-boundaries -flto %s -### 2>&1 | FileCheck %s --check-prefix=32B-LTO
+// 32B-LTO: "-plugin-opt=-x86-branches-within-32B-boundaries"
 
 /// Unsupported on other targets.
 // RUN: %clang -target aarch64 -malign-branch=jmp %s -c -### 2>&1 | FileCheck --check-prefix=UNUSED %s
Index: clang/lib/Driver/ToolChains/CommonArgs.h
===
--- clang/lib/Driver/ToolChains/CommonArgs.h
+++ clang/lib/Driver/ToolChains/CommonArgs.h
@@ -127,6 +127,8 @@
 void addMultilibFlag(bool Enabled, const char *const Flag,
  Multilib::flags_list &Flags);
 
+void addX86AlignBranchArgs(const Driver &D, const llvm::opt::ArgList &Args,
+   llvm::opt::ArgStringList &CmdArgs, bool IsLTO);
 } // end namespace tools
 } // end namespace driver
 } // end namespace clang
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -358,6 +358,7 @@
   ArgStringList &CmdArgs, const InputInfo &Output,
   const InputInfo &Input, bool IsThinLTO) {
   const char *Linker = Args.MakeArgString(ToolChain.GetLinkerPath());
+  const Driver &D = ToolChain.getDriver();
   if (llvm::sys::path::filename(Linker) != "ld.lld" &&
   llvm::sys::path::stem(Linker) != "ld.lld") {
 // Tell the linker to load the plugin. This has to come before
@@ -374,10 +375,9 @@
 #endif
 
 SmallString<1024> Plugin;
-llvm::sys::path::native(Twine(ToolChain.getDriver().Dir) +
-"/../lib" CLANG_LIBDIR_SUFFIX "/LLVMgold" +
-Suffix,
-Plugin);
+llvm::sys::path::native(
+Twine(D.Dir) + "/../lib" CLANG_LIBDIR_SUFFIX "/LLVMgold" + Suffix,
+Plugin);
 CmdArgs.push_back(Args.MakeArgString(Plugin));
   }
 
@@ -417,7 +417,7 @@
   if (IsThinLTO)

[PATCH] D80289: [Driver][X86] Support branch align options with LTO

2020-05-22 Thread Kan Shengchen via Phabricator via cfe-commits
skan added a comment.

Ping.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D80289/new/

https://reviews.llvm.org/D80289



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D80289: [Driver][X86] Support branch align options with LTO

2020-05-27 Thread Kan Shengchen via Phabricator via cfe-commits
skan marked an inline comment as done.
skan added inline comments.



Comment at: clang/test/Driver/x86-malign-branch.c:6
 // BOUNDARY: "-mllvm" "-x86-align-branch-boundary=16"
+// RUN: %clang -target x86_64-unknown-linux -malign-branch-boundary=16 -flto 
%s -### 2>&1 | FileCheck %s --check-prefix=BOUNDARY-LTO
+// BOUNDARY-LTO: "-plugin-opt=-x86-align-branch-boundary=16"

MaskRay wrote:
> Drop `-unknown-linux`
> 
> ditto below
Sorry it seems I didn't submit my comment...

Dropping `-unknown-linux`  here would get an error

```
 error: 'x86_64': unable to pass LLVM bit-code files to linker
```


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D80289/new/

https://reviews.llvm.org/D80289



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D80289: [Driver][X86] Support branch align options with LTO

2020-05-27 Thread Kan Shengchen via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
skan marked an inline comment as done.
Closed by commit rG495444999549: [Driver][X86] Support branch align options 
with LTO (authored by skan).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D80289/new/

https://reviews.llvm.org/D80289

Files:
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/lib/Driver/ToolChains/CommonArgs.h
  clang/test/Driver/x86-malign-branch.c

Index: clang/test/Driver/x86-malign-branch.c
===
--- clang/test/Driver/x86-malign-branch.c
+++ clang/test/Driver/x86-malign-branch.c
@@ -1,8 +1,10 @@
-/// Test that -malign-branch* and -mbranches-within-32B-boundaries are parsed and converted to -mllvm options.
+/// Test that -malign-branch* and -mbranches-within-32B-boundaries are parsed and converted to MC options.
 
 /// Test -malign-branch-boundary=
 // RUN: %clang -target x86_64 -malign-branch-boundary=16 %s -c -### 2>&1 | FileCheck %s --check-prefix=BOUNDARY
 // BOUNDARY: "-mllvm" "-x86-align-branch-boundary=16"
+// RUN: %clang -target x86_64-unknown-linux -malign-branch-boundary=16 -flto %s -### 2>&1 | FileCheck %s --check-prefix=BOUNDARY-LTO
+// BOUNDARY-LTO: "-plugin-opt=-x86-align-branch-boundary=16"
 
 // RUN: %clang -target x86_64 -malign-branch-boundary=8 %s -c -### 2>&1 | FileCheck %s --check-prefix=BOUNDARY-ERR
 // RUN: %clang -target x86_64 -malign-branch-boundary=15 %s -c -### 2>&1 | FileCheck %s --check-prefix=BOUNDARY-ERR
@@ -13,6 +15,8 @@
 // TYPE0: "-mllvm" "-x86-align-branch=fused+jcc+jmp"
 // RUN: %clang -target x86_64 -malign-branch=fused,jcc,jmp,ret,call,indirect %s -c -### %s 2>&1 | FileCheck %s --check-prefix=TYPE1
 // TYPE1: "-mllvm" "-x86-align-branch=fused+jcc+jmp+ret+call+indirect"
+// RUN: %clang -target x86_64-unknown-linux -malign-branch=fused,jcc,jmp -flto %s -### %s 2>&1 | FileCheck %s --check-prefix=TYPE0-LTO
+// TYPE0-LTO: "-plugin-opt=-x86-align-branch=fused+jcc+jmp"
 
 // RUN: %clang -target x86_64 -malign-branch=fused,foo,bar %s -c -### %s 2>&1 | FileCheck %s --check-prefix=TYPE-ERR
 // TYPE-ERR: invalid argument 'foo' to -malign-branch=; each element must be one of: fused, jcc, jmp, call, ret, indirect
@@ -23,10 +27,14 @@
 // PREFIX-0: "-mllvm" "-x86-pad-max-prefix-size=0"
 // RUN: %clang -target x86_64 -mpad-max-prefix-size=15 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX-15
 // PREFIX-15: "-mllvm" "-x86-pad-max-prefix-size=15"
+// RUN: %clang -target x86_64-unknown-linux -mpad-max-prefix-size=0 -flto %s -### 2>&1 | FileCheck %s --check-prefix=PREFIX-0-LTO
+// PREFIX-0-LTO: "-plugin-opt=-x86-pad-max-prefix-size=0"
 
 /// Test -mbranches-within-32B-boundaries
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 | FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
+// RUN: %clang -target x86_64-unknown-linux -mbranches-within-32B-boundaries -flto %s -### 2>&1 | FileCheck %s --check-prefix=32B-LTO
+// 32B-LTO: "-plugin-opt=-x86-branches-within-32B-boundaries"
 
 /// Unsupported on other targets.
 // RUN: %clang -target aarch64 -malign-branch=jmp %s -c -### 2>&1 | FileCheck --check-prefix=UNUSED %s
Index: clang/lib/Driver/ToolChains/CommonArgs.h
===
--- clang/lib/Driver/ToolChains/CommonArgs.h
+++ clang/lib/Driver/ToolChains/CommonArgs.h
@@ -127,6 +127,8 @@
 void addMultilibFlag(bool Enabled, const char *const Flag,
  Multilib::flags_list &Flags);
 
+void addX86AlignBranchArgs(const Driver &D, const llvm::opt::ArgList &Args,
+   llvm::opt::ArgStringList &CmdArgs, bool IsLTO);
 } // end namespace tools
 } // end namespace driver
 } // end namespace clang
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -358,6 +358,7 @@
   ArgStringList &CmdArgs, const InputInfo &Output,
   const InputInfo &Input, bool IsThinLTO) {
   const char *Linker = Args.MakeArgString(ToolChain.GetLinkerPath());
+  const Driver &D = ToolChain.getDriver();
   if (llvm::sys::path::filename(Linker) != "ld.lld" &&
   llvm::sys::path::stem(Linker) != "ld.lld") {
 // Tell the linker to load the plugin. This has to come before
@@ -374,10 +375,9 @@
 #endif
 
 SmallString<1024> Plugin;
-llvm::sys::path::native(Twine(ToolChain.getDriver().Dir) +
-"/../lib" CLANG_LIBDIR_SUFFIX "/LLVMgold" +
-Suffix,
-Plugin);
+llvm::sys::path::native(
+Twine(D.Dir) + "/../lib" CLANG_LIBDIR_SUFFIX "/LLVMgold" + Suffix,
+Plugin);
 CmdArgs.push_back(Args.MakeArgString(Plugin))

[PATCH] D77628: [Driver][X86] Add -mpad-max-prefix-size

2020-04-06 Thread Kan Shengchen via Phabricator via cfe-commits
skan created this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
skan edited the summary of this revision.

The option `-mpad-max-prefix-size` performs some checking and delegate to MC 
option `-x86-pad-max-prefix-size`. This option is designed for eliminate NOPs 
when we need to align something by adding redundant prefixes to instructions, 
e.g. it can be used along with `-malign-branch`, `-malign-branch-boundary` to 
prefix padding branch.

It has similar (but slightly different) effect as GAS's option 
`-malign-branch-prefix-size`, e.g. `-mpad-max-prefix-size` can also elminate 
NOPs emitted by align directive, so we use a different name here. I remove the 
option `-malign-branch-prefix-size` since is unimplemented and not needed. If 
we need to be compatible with GAS, we can make `-malign-branch-prefix-size` an 
alias for this option later.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D77628

Files:
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/test/Driver/x86-malign-branch.c
  clang/test/Driver/x86-malign-branch.s


Index: clang/test/Driver/x86-malign-branch.s
===
--- clang/test/Driver/x86-malign-branch.s
+++ clang/test/Driver/x86-malign-branch.s
@@ -6,8 +6,8 @@
 // RUN: %clang -target x86_64 -malign-branch=fused,jcc,jmp %s -c -### %s 2>&1 
| FileCheck %s --check-prefix=TYPE
 // TYPE: "-mllvm" "-x86-align-branch=fused+jcc+jmp"
 
-// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX
-// PREFIX: "-mllvm" "-x86-align-branch-prefix-size=5"
+// RUN: %clang -target x86_64 -mpad-max-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX
+// PREFIX: "-mllvm" "-x86-pad-max-prefix-size=5"
 
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 
| FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
Index: clang/test/Driver/x86-malign-branch.c
===
--- clang/test/Driver/x86-malign-branch.c
+++ clang/test/Driver/x86-malign-branch.c
@@ -18,13 +18,13 @@
 // TYPE-ERR: invalid argument 'foo' to -malign-branch=; each element must be 
one of: fused, jcc, jmp, call, ret, indirect
 // TYPE-ERR: invalid argument 'bar' to -malign-branch=; each element must be 
one of: fused, jcc, jmp, call, ret, indirect
 
-/// Test -malign-branch-prefix-size=
-// RUN: %clang -target x86_64 -malign-branch-prefix-size=0 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-0
-// PREFIX-0: "-mllvm" "-x86-align-branch-prefix-size=0"
-// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-5
-// PREFIX-5: "-mllvm" "-x86-align-branch-prefix-size=5"
+/// Test -mpad-max-prefix-size=
+// RUN: %clang -target x86_64 -mpad-max-prefix-size=0 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-0
+// PREFIX-0: "-mllvm" "-x86-pad-max-prefix-size=0"
+// RUN: %clang -target x86_64 -mpad-max-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-5
+// PREFIX-5: "-mllvm" "-x86-pad-max-prefix-size=5"
 
-// RUN: %clang -target x86_64 -malign-branch-prefix-size=6 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-6
+// RUN: %clang -target x86_64 -mpad-max-prefix-size=6 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-6
 // PREFIX-6: invalid argument
 
 /// Test -mbranches-within-32B-boundaries
@@ -34,6 +34,6 @@
 /// Unsupported on other targets.
 // RUN: %clang -target aarch64 -malign-branch=jmp %s -c -### 2>&1 | FileCheck 
--check-prefix=UNUSED %s
 // RUN: %clang -target aarch64 -malign-branch-boundary=7 %s -c -### 2>&1 | 
FileCheck --check-prefix=UNUSED %s
-// RUN: %clang -target aarch64 -malign-branch-prefix-size=15 %s -c -### 2>&1 | 
FileCheck --check-prefix=UNUSED %s
+// RUN: %clang -target aarch64 -mpad-max-prefix-size=15 %s -c -### 2>&1 | 
FileCheck --check-prefix=UNUSED %s
 // RUN: %clang -target aarch64 -mbranches-within-32B-boundaries %s -c -### 
2>&1 | FileCheck --check-prefix=UNUSED %s
 // UNUSED: warning: argument unused
Index: clang/lib/Driver/ToolChains/Clang.cpp
===
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -2079,7 +2079,7 @@
 CmdArgs.push_back(Args.MakeArgString("-x86-align-branch=" + AlignBranch));
   }
   if (const Arg *A =
-  Args.getLastArg(options::OPT_malign_branch_prefix_size_EQ)) {
+  Args.getLastArg(options::OPT_mpad_max_prefix_size_EQ)) {
 StringRef Value = A->getValue();
 unsigned PrefixSize;
 if (Value.getAsInteger(10, PrefixSize) || PrefixSize > 5) {
@@ -2087,7 +2087,7 @@
   << Value << A->getOption().getName();
 } else {
   CmdArgs.push_back("-mllvm");
-  CmdArgs.push_back(Args.MakeArgString("-x86-align-branch-prefix-size=" +
+  CmdArgs.pu

[PATCH] D77628: [Driver][X86] Add -mpad-max-prefix-size

2020-04-06 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 255583.
skan added a comment.

format the patch


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77628/new/

https://reviews.llvm.org/D77628

Files:
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/test/Driver/x86-malign-branch.c
  clang/test/Driver/x86-malign-branch.s


Index: clang/test/Driver/x86-malign-branch.s
===
--- clang/test/Driver/x86-malign-branch.s
+++ clang/test/Driver/x86-malign-branch.s
@@ -6,8 +6,8 @@
 // RUN: %clang -target x86_64 -malign-branch=fused,jcc,jmp %s -c -### %s 2>&1 
| FileCheck %s --check-prefix=TYPE
 // TYPE: "-mllvm" "-x86-align-branch=fused+jcc+jmp"
 
-// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX
-// PREFIX: "-mllvm" "-x86-align-branch-prefix-size=5"
+// RUN: %clang -target x86_64 -mpad-max-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX
+// PREFIX: "-mllvm" "-x86-pad-max-prefix-size=5"
 
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 
| FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
Index: clang/test/Driver/x86-malign-branch.c
===
--- clang/test/Driver/x86-malign-branch.c
+++ clang/test/Driver/x86-malign-branch.c
@@ -18,13 +18,13 @@
 // TYPE-ERR: invalid argument 'foo' to -malign-branch=; each element must be 
one of: fused, jcc, jmp, call, ret, indirect
 // TYPE-ERR: invalid argument 'bar' to -malign-branch=; each element must be 
one of: fused, jcc, jmp, call, ret, indirect
 
-/// Test -malign-branch-prefix-size=
-// RUN: %clang -target x86_64 -malign-branch-prefix-size=0 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-0
-// PREFIX-0: "-mllvm" "-x86-align-branch-prefix-size=0"
-// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-5
-// PREFIX-5: "-mllvm" "-x86-align-branch-prefix-size=5"
+/// Test -mpad-max-prefix-size=
+// RUN: %clang -target x86_64 -mpad-max-prefix-size=0 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-0
+// PREFIX-0: "-mllvm" "-x86-pad-max-prefix-size=0"
+// RUN: %clang -target x86_64 -mpad-max-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-5
+// PREFIX-5: "-mllvm" "-x86-pad-max-prefix-size=5"
 
-// RUN: %clang -target x86_64 -malign-branch-prefix-size=6 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-6
+// RUN: %clang -target x86_64 -mpad-max-prefix-size=6 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-6
 // PREFIX-6: invalid argument
 
 /// Test -mbranches-within-32B-boundaries
@@ -34,6 +34,6 @@
 /// Unsupported on other targets.
 // RUN: %clang -target aarch64 -malign-branch=jmp %s -c -### 2>&1 | FileCheck 
--check-prefix=UNUSED %s
 // RUN: %clang -target aarch64 -malign-branch-boundary=7 %s -c -### 2>&1 | 
FileCheck --check-prefix=UNUSED %s
-// RUN: %clang -target aarch64 -malign-branch-prefix-size=15 %s -c -### 2>&1 | 
FileCheck --check-prefix=UNUSED %s
+// RUN: %clang -target aarch64 -mpad-max-prefix-size=15 %s -c -### 2>&1 | 
FileCheck --check-prefix=UNUSED %s
 // RUN: %clang -target aarch64 -mbranches-within-32B-boundaries %s -c -### 
2>&1 | FileCheck --check-prefix=UNUSED %s
 // UNUSED: warning: argument unused
Index: clang/lib/Driver/ToolChains/Clang.cpp
===
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -2078,8 +2078,7 @@
 CmdArgs.push_back("-mllvm");
 CmdArgs.push_back(Args.MakeArgString("-x86-align-branch=" + AlignBranch));
   }
-  if (const Arg *A =
-  Args.getLastArg(options::OPT_malign_branch_prefix_size_EQ)) {
+  if (const Arg *A = Args.getLastArg(options::OPT_mpad_max_prefix_size_EQ)) {
 StringRef Value = A->getValue();
 unsigned PrefixSize;
 if (Value.getAsInteger(10, PrefixSize) || PrefixSize > 5) {
@@ -2087,8 +2086,8 @@
   << Value << A->getOption().getName();
 } else {
   CmdArgs.push_back("-mllvm");
-  CmdArgs.push_back(Args.MakeArgString("-x86-align-branch-prefix-size=" +
-   Twine(PrefixSize)));
+  CmdArgs.push_back(
+  Args.MakeArgString("-x86-pad-max-prefix-size=" + Twine(PrefixSize)));
 }
   }
 }
Index: clang/include/clang/Driver/Options.td
===
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -2187,7 +2187,8 @@
   HelpText<"Specify types of branches to align">;
 def malign_branch_boundary_EQ : Joined<["-"], "malign-branch-boundary=">, 
Group, Flags<[DriverOption]>,
   HelpText<"Specify the boundary's size to align branches">;
-def malign_branch_prefix_size_EQ : Joined<["-"], 
"malign-branch-prefix-size=">, Group;

[PATCH] D77628: [Driver][X86] Add -mpad-max-prefix-size

2020-04-06 Thread Kan Shengchen via Phabricator via cfe-commits
skan added a comment.

The remote build failed due to a bug of Pre-merge checks, which tried to apply 
a landed patch.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77628/new/

https://reviews.llvm.org/D77628



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D77628: [Driver][X86] Add -mpad-max-prefix-size

2020-04-08 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 255953.
skan added a comment.

Rebase


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77628/new/

https://reviews.llvm.org/D77628

Files:
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/test/Driver/x86-malign-branch.c
  clang/test/Driver/x86-malign-branch.s


Index: clang/test/Driver/x86-malign-branch.s
===
--- clang/test/Driver/x86-malign-branch.s
+++ clang/test/Driver/x86-malign-branch.s
@@ -6,8 +6,8 @@
 // RUN: %clang -target x86_64 -malign-branch=fused,jcc,jmp %s -c -### %s 2>&1 
| FileCheck %s --check-prefix=TYPE
 // TYPE: "-mllvm" "-x86-align-branch=fused+jcc+jmp"
 
-// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX
-// PREFIX: "-mllvm" "-x86-align-branch-prefix-size=5"
+// RUN: %clang -target x86_64 -mpad-max-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX
+// PREFIX: "-mllvm" "-x86-pad-max-prefix-size=5"
 
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 
| FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
Index: clang/test/Driver/x86-malign-branch.c
===
--- clang/test/Driver/x86-malign-branch.c
+++ clang/test/Driver/x86-malign-branch.c
@@ -18,13 +18,13 @@
 // TYPE-ERR: invalid argument 'foo' to -malign-branch=; each element must be 
one of: fused, jcc, jmp, call, ret, indirect
 // TYPE-ERR: invalid argument 'bar' to -malign-branch=; each element must be 
one of: fused, jcc, jmp, call, ret, indirect
 
-/// Test -malign-branch-prefix-size=
-// RUN: %clang -target x86_64 -malign-branch-prefix-size=0 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-0
-// PREFIX-0: "-mllvm" "-x86-align-branch-prefix-size=0"
-// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-5
-// PREFIX-5: "-mllvm" "-x86-align-branch-prefix-size=5"
+/// Test -mpad-max-prefix-size=
+// RUN: %clang -target x86_64 -mpad-max-prefix-size=0 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-0
+// PREFIX-0: "-mllvm" "-x86-pad-max-prefix-size=0"
+// RUN: %clang -target x86_64 -mpad-max-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-5
+// PREFIX-5: "-mllvm" "-x86-pad-max-prefix-size=5"
 
-// RUN: %clang -target x86_64 -malign-branch-prefix-size=6 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-6
+// RUN: %clang -target x86_64 -mpad-max-prefix-size=6 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-6
 // PREFIX-6: invalid argument
 
 /// Test -mbranches-within-32B-boundaries
@@ -34,6 +34,6 @@
 /// Unsupported on other targets.
 // RUN: %clang -target aarch64 -malign-branch=jmp %s -c -### 2>&1 | FileCheck 
--check-prefix=UNUSED %s
 // RUN: %clang -target aarch64 -malign-branch-boundary=7 %s -c -### 2>&1 | 
FileCheck --check-prefix=UNUSED %s
-// RUN: %clang -target aarch64 -malign-branch-prefix-size=15 %s -c -### 2>&1 | 
FileCheck --check-prefix=UNUSED %s
+// RUN: %clang -target aarch64 -mpad-max-prefix-size=15 %s -c -### 2>&1 | 
FileCheck --check-prefix=UNUSED %s
 // RUN: %clang -target aarch64 -mbranches-within-32B-boundaries %s -c -### 
2>&1 | FileCheck --check-prefix=UNUSED %s
 // UNUSED: warning: argument unused
Index: clang/lib/Driver/ToolChains/Clang.cpp
===
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -2078,8 +2078,7 @@
 CmdArgs.push_back("-mllvm");
 CmdArgs.push_back(Args.MakeArgString("-x86-align-branch=" + AlignBranch));
   }
-  if (const Arg *A =
-  Args.getLastArg(options::OPT_malign_branch_prefix_size_EQ)) {
+  if (const Arg *A = Args.getLastArg(options::OPT_mpad_max_prefix_size_EQ)) {
 StringRef Value = A->getValue();
 unsigned PrefixSize;
 if (Value.getAsInteger(10, PrefixSize) || PrefixSize > 5) {
@@ -2087,8 +2086,8 @@
   << Value << A->getOption().getName();
 } else {
   CmdArgs.push_back("-mllvm");
-  CmdArgs.push_back(Args.MakeArgString("-x86-align-branch-prefix-size=" +
-   Twine(PrefixSize)));
+  CmdArgs.push_back(
+  Args.MakeArgString("-x86-pad-max-prefix-size=" + Twine(PrefixSize)));
 }
   }
 }
Index: clang/include/clang/Driver/Options.td
===
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -2187,7 +2187,8 @@
   HelpText<"Specify types of branches to align">;
 def malign_branch_boundary_EQ : Joined<["-"], "malign-branch-boundary=">, 
Group, Flags<[DriverOption]>,
   HelpText<"Specify the boundary's size to align branches">;
-def malign_branch_prefix_size_EQ : Joined<["-"], 
"malign-branch-prefix-size=">, Group;
+def mpad_

[PATCH] D77728: [Driver][X86] Add an alias for -mpad-max-prefix-size

2020-04-08 Thread Kan Shengchen via Phabricator via cfe-commits
skan created this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
skan added a parent revision: D77628: [Driver][X86] Add -mpad-max-prefix-size.

Make -malign-branch-prefix-size an alias for -mpad-max-prefix-size (For
GCC compatibility)


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D77728

Files:
  clang/include/clang/Driver/Options.td
  clang/test/Driver/x86-malign-branch.c
  clang/test/Driver/x86-malign-branch.s


Index: clang/test/Driver/x86-malign-branch.s
===
--- clang/test/Driver/x86-malign-branch.s
+++ clang/test/Driver/x86-malign-branch.s
@@ -9,5 +9,7 @@
 // RUN: %clang -target x86_64 -mpad-max-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX
 // PREFIX: "-mllvm" "-x86-pad-max-prefix-size=5"
 
+// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX
+
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 
| FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
Index: clang/test/Driver/x86-malign-branch.c
===
--- clang/test/Driver/x86-malign-branch.c
+++ clang/test/Driver/x86-malign-branch.c
@@ -27,6 +27,9 @@
 // RUN: %clang -target x86_64 -mpad-max-prefix-size=6 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-6
 // PREFIX-6: invalid argument
 
+/// Test -malign-branch-prefix-size= for GCC compatibilty
+// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-5
+
 /// Test -mbranches-within-32B-boundaries
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 
| FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
Index: clang/include/clang/Driver/Options.td
===
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -2189,6 +2189,8 @@
   HelpText<"Specify the boundary's size to align branches">;
 def mpad_max_prefix_size_EQ : Joined<["-"], "mpad-max-prefix-size=">, 
Group, Flags<[DriverOption]>,
   HelpText<"Specify maximum number of prefixes to use for padding">;
+def malign_branch_prefix_size_EQ : Joined<["-"], 
"malign-branch-prefix-size=">, Group, 
Flags<[DriverOption]>,Alias,
+  HelpText<"Alias for -mpad-max-prefix-size">;// Alias for GCC compatibility
 def mbranches_within_32B_boundaries : Flag<["-"], 
"mbranches-within-32B-boundaries">, Flags<[DriverOption]>, Group,
   HelpText<"Align selected branches (fused, jcc, jmp) within 32-byte 
boundary">;
 def mfancy_math_387 : Flag<["-"], "mfancy-math-387">, 
Group;


Index: clang/test/Driver/x86-malign-branch.s
===
--- clang/test/Driver/x86-malign-branch.s
+++ clang/test/Driver/x86-malign-branch.s
@@ -9,5 +9,7 @@
 // RUN: %clang -target x86_64 -mpad-max-prefix-size=5 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX
 // PREFIX: "-mllvm" "-x86-pad-max-prefix-size=5"
 
+// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX
+
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 | FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
Index: clang/test/Driver/x86-malign-branch.c
===
--- clang/test/Driver/x86-malign-branch.c
+++ clang/test/Driver/x86-malign-branch.c
@@ -27,6 +27,9 @@
 // RUN: %clang -target x86_64 -mpad-max-prefix-size=6 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX-6
 // PREFIX-6: invalid argument
 
+/// Test -malign-branch-prefix-size= for GCC compatibilty
+// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX-5
+
 /// Test -mbranches-within-32B-boundaries
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 | FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
Index: clang/include/clang/Driver/Options.td
===
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -2189,6 +2189,8 @@
   HelpText<"Specify the boundary's size to align branches">;
 def mpad_max_prefix_size_EQ : Joined<["-"], "mpad-max-prefix-size=">, Group, Flags<[DriverOption]>,
   HelpText<"Specify maximum number of prefixes to use for padding">;
+def malign_branch_prefix_size_EQ : Joined<["-"], "malign-branch-prefix-size=">, Group, Flags<[DriverOption]>,Alias,
+  HelpText<"Alias for -mpad-max-prefix-size">;// Alias for GCC compatibility
 def mbranches_within_32B_boundaries : Flag<["-"], "mbranches-within-32B-boundaries">, Flags<[DriverOption]>, Group,
   HelpText<"Align selected br

[PATCH] D77728: [Driver][X86] Add an alias for -mpad-max-prefix-size

2020-04-08 Thread Kan Shengchen via Phabricator via cfe-commits
skan added a comment.

In D77728#1969788 , @MaskRay wrote:

> > Make -malign-branch-prefix-size an alias for -mpad-max-prefix-size (For GCC 
> > compatibility)
>
> I cannot find a discussion on -mpad-max-prefix-size. Is it a planned GNU as 
> option or GCC driver option?


`-mpad-max-prefix-size` has nothing to do with GCC,  it exposes the 
`-x86-pad-max-prefix-size` to clang


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77728/new/

https://reviews.llvm.org/D77728



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D77628: [Driver][X86] Add -mpad-max-prefix-size

2020-04-08 Thread Kan Shengchen via Phabricator via cfe-commits
skan added a comment.



In D77628#1969856 , @MaskRay wrote:

> This looks like it requires more thorough discussions, doesn't it? We will 
> also need discussions with the binutils side. We requested a GCC compiler 
> driver option long ago but we do not reach a consensus 
> (https://gcc.gnu.org/legacy-ml/gcc/2020-01/msg00358.html). IMHO the approval 
> was in haste. With all due respect, I think I've seen such hasty approval 
> (without any mentioning why such decisions are justifiable) and hasty commits 
> in this area before several times, so I'll click "Request Changes" just in 
> case of an accidental commit.


AFAICS, this patch adds `-mpad-max-prefix-size` for clang, I mentioned 
`-malign-branch-prefix-size` in the summary just to clarify it has different 
behaviour from GAS's option `-malign-branch-prefix-size`.  This patch has 
nothing to do with GCC compatibility, so I think the reasons for objection are 
not sufficient.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77628/new/

https://reviews.llvm.org/D77628



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D77628: [Driver][X86] Add -mpad-max-prefix-size

2020-04-08 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 256164.
skan added a comment.

Remove the limit "max padding prefix size <=5" since MC doesn't
have this limit.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77628/new/

https://reviews.llvm.org/D77628

Files:
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/test/Driver/x86-malign-branch.c
  clang/test/Driver/x86-malign-branch.s


Index: clang/test/Driver/x86-malign-branch.s
===
--- clang/test/Driver/x86-malign-branch.s
+++ clang/test/Driver/x86-malign-branch.s
@@ -6,8 +6,8 @@
 // RUN: %clang -target x86_64 -malign-branch=fused,jcc,jmp %s -c -### %s 2>&1 
| FileCheck %s --check-prefix=TYPE
 // TYPE: "-mllvm" "-x86-align-branch=fused+jcc+jmp"
 
-// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX
-// PREFIX: "-mllvm" "-x86-align-branch-prefix-size=5"
+// RUN: %clang -target x86_64 -mpad-max-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX
+// PREFIX: "-mllvm" "-x86-pad-max-prefix-size=5"
 
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 
| FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
Index: clang/test/Driver/x86-malign-branch.c
===
--- clang/test/Driver/x86-malign-branch.c
+++ clang/test/Driver/x86-malign-branch.c
@@ -18,14 +18,11 @@
 // TYPE-ERR: invalid argument 'foo' to -malign-branch=; each element must be 
one of: fused, jcc, jmp, call, ret, indirect
 // TYPE-ERR: invalid argument 'bar' to -malign-branch=; each element must be 
one of: fused, jcc, jmp, call, ret, indirect
 
-/// Test -malign-branch-prefix-size=
-// RUN: %clang -target x86_64 -malign-branch-prefix-size=0 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-0
-// PREFIX-0: "-mllvm" "-x86-align-branch-prefix-size=0"
-// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-5
-// PREFIX-5: "-mllvm" "-x86-align-branch-prefix-size=5"
-
-// RUN: %clang -target x86_64 -malign-branch-prefix-size=6 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-6
-// PREFIX-6: invalid argument
+/// Test -mpad-max-prefix-size=
+// RUN: %clang -target x86_64 -mpad-max-prefix-size=0 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-0
+// PREFIX-0: "-mllvm" "-x86-pad-max-prefix-size=0"
+// RUN: %clang -target x86_64 -mpad-max-prefix-size=15 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-15
+// PREFIX-15: "-mllvm" "-x86-pad-max-prefix-size=15"
 
 /// Test -mbranches-within-32B-boundaries
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 
| FileCheck %s --check-prefix=32B
@@ -34,6 +31,6 @@
 /// Unsupported on other targets.
 // RUN: %clang -target aarch64 -malign-branch=jmp %s -c -### 2>&1 | FileCheck 
--check-prefix=UNUSED %s
 // RUN: %clang -target aarch64 -malign-branch-boundary=7 %s -c -### 2>&1 | 
FileCheck --check-prefix=UNUSED %s
-// RUN: %clang -target aarch64 -malign-branch-prefix-size=15 %s -c -### 2>&1 | 
FileCheck --check-prefix=UNUSED %s
+// RUN: %clang -target aarch64 -mpad-max-prefix-size=15 %s -c -### 2>&1 | 
FileCheck --check-prefix=UNUSED %s
 // RUN: %clang -target aarch64 -mbranches-within-32B-boundaries %s -c -### 
2>&1 | FileCheck --check-prefix=UNUSED %s
 // UNUSED: warning: argument unused
Index: clang/lib/Driver/ToolChains/Clang.cpp
===
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -2078,17 +2078,16 @@
 CmdArgs.push_back("-mllvm");
 CmdArgs.push_back(Args.MakeArgString("-x86-align-branch=" + AlignBranch));
   }
-  if (const Arg *A =
-  Args.getLastArg(options::OPT_malign_branch_prefix_size_EQ)) {
+  if (const Arg *A = Args.getLastArg(options::OPT_mpad_max_prefix_size_EQ)) {
 StringRef Value = A->getValue();
 unsigned PrefixSize;
-if (Value.getAsInteger(10, PrefixSize) || PrefixSize > 5) {
+if (Value.getAsInteger(10, PrefixSize)) {
   D.Diag(diag::err_drv_invalid_argument_to_option)
   << Value << A->getOption().getName();
 } else {
   CmdArgs.push_back("-mllvm");
-  CmdArgs.push_back(Args.MakeArgString("-x86-align-branch-prefix-size=" +
-   Twine(PrefixSize)));
+  CmdArgs.push_back(
+  Args.MakeArgString("-x86-pad-max-prefix-size=" + Twine(PrefixSize)));
 }
   }
 }
Index: clang/include/clang/Driver/Options.td
===
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -2187,7 +2187,8 @@
   HelpText<"Specify types of branches to align">;
 def malign_branch_boundary_EQ : Joined<["-"], "malign-branch-boundary=">, 
Group, Flags<[DriverOption

[PATCH] D77728: [Driver][X86] Add an alias for -mpad-max-prefix-size

2020-04-08 Thread Kan Shengchen via Phabricator via cfe-commits
skan added a comment.

In D77728#1970922 , @MaskRay wrote:

> In D77728#1970912 , @skan wrote:
>
> > In D77728#1969788 , @MaskRay wrote:
> >
> > > > Make -malign-branch-prefix-size an alias for -mpad-max-prefix-size (For 
> > > > GCC compatibility)
> > >
> > > I cannot find a discussion on -mpad-max-prefix-size. Is it a planned GNU 
> > > as option or GCC driver option?
> >
> >
> > `-mpad-max-prefix-size` has nothing to do with GCC,  it exposes the 
> > `-x86-pad-max-prefix-size` to clang
>
>
> Then it is incorrect to say `HelpText<"Alias for -mpad-max-prefix-size">;// 
> Alias for GCC compatibility`


Fine, we can have more discussion on this revision. D77628 
 really has nothing to do with GCC/GAS 
compatibility, could you remove the "request change"?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77728/new/

https://reviews.llvm.org/D77728



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D77628: [Driver][X86] Add -mpad-max-prefix-size

2020-04-09 Thread Kan Shengchen via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG792b10978dfd: [Driver][X86] Add -mpad-max-prefix-size 
(authored by skan).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77628/new/

https://reviews.llvm.org/D77628

Files:
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/test/Driver/x86-malign-branch.c
  clang/test/Driver/x86-malign-branch.s


Index: clang/test/Driver/x86-malign-branch.s
===
--- clang/test/Driver/x86-malign-branch.s
+++ clang/test/Driver/x86-malign-branch.s
@@ -6,8 +6,8 @@
 // RUN: %clang -target x86_64 -malign-branch=fused,jcc,jmp %s -c -### %s 2>&1 
| FileCheck %s --check-prefix=TYPE
 // TYPE: "-mllvm" "-x86-align-branch=fused+jcc+jmp"
 
-// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX
-// PREFIX: "-mllvm" "-x86-align-branch-prefix-size=5"
+// RUN: %clang -target x86_64 -mpad-max-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX
+// PREFIX: "-mllvm" "-x86-pad-max-prefix-size=5"
 
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 
| FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
Index: clang/test/Driver/x86-malign-branch.c
===
--- clang/test/Driver/x86-malign-branch.c
+++ clang/test/Driver/x86-malign-branch.c
@@ -18,14 +18,11 @@
 // TYPE-ERR: invalid argument 'foo' to -malign-branch=; each element must be 
one of: fused, jcc, jmp, call, ret, indirect
 // TYPE-ERR: invalid argument 'bar' to -malign-branch=; each element must be 
one of: fused, jcc, jmp, call, ret, indirect
 
-/// Test -malign-branch-prefix-size=
-// RUN: %clang -target x86_64 -malign-branch-prefix-size=0 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-0
-// PREFIX-0: "-mllvm" "-x86-align-branch-prefix-size=0"
-// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-5
-// PREFIX-5: "-mllvm" "-x86-align-branch-prefix-size=5"
-
-// RUN: %clang -target x86_64 -malign-branch-prefix-size=6 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-6
-// PREFIX-6: invalid argument
+/// Test -mpad-max-prefix-size=
+// RUN: %clang -target x86_64 -mpad-max-prefix-size=0 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-0
+// PREFIX-0: "-mllvm" "-x86-pad-max-prefix-size=0"
+// RUN: %clang -target x86_64 -mpad-max-prefix-size=15 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-15
+// PREFIX-15: "-mllvm" "-x86-pad-max-prefix-size=15"
 
 /// Test -mbranches-within-32B-boundaries
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 
| FileCheck %s --check-prefix=32B
@@ -34,6 +31,6 @@
 /// Unsupported on other targets.
 // RUN: %clang -target aarch64 -malign-branch=jmp %s -c -### 2>&1 | FileCheck 
--check-prefix=UNUSED %s
 // RUN: %clang -target aarch64 -malign-branch-boundary=7 %s -c -### 2>&1 | 
FileCheck --check-prefix=UNUSED %s
-// RUN: %clang -target aarch64 -malign-branch-prefix-size=15 %s -c -### 2>&1 | 
FileCheck --check-prefix=UNUSED %s
+// RUN: %clang -target aarch64 -mpad-max-prefix-size=15 %s -c -### 2>&1 | 
FileCheck --check-prefix=UNUSED %s
 // RUN: %clang -target aarch64 -mbranches-within-32B-boundaries %s -c -### 
2>&1 | FileCheck --check-prefix=UNUSED %s
 // UNUSED: warning: argument unused
Index: clang/lib/Driver/ToolChains/Clang.cpp
===
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -2078,17 +2078,16 @@
 CmdArgs.push_back("-mllvm");
 CmdArgs.push_back(Args.MakeArgString("-x86-align-branch=" + AlignBranch));
   }
-  if (const Arg *A =
-  Args.getLastArg(options::OPT_malign_branch_prefix_size_EQ)) {
+  if (const Arg *A = Args.getLastArg(options::OPT_mpad_max_prefix_size_EQ)) {
 StringRef Value = A->getValue();
 unsigned PrefixSize;
-if (Value.getAsInteger(10, PrefixSize) || PrefixSize > 5) {
+if (Value.getAsInteger(10, PrefixSize)) {
   D.Diag(diag::err_drv_invalid_argument_to_option)
   << Value << A->getOption().getName();
 } else {
   CmdArgs.push_back("-mllvm");
-  CmdArgs.push_back(Args.MakeArgString("-x86-align-branch-prefix-size=" +
-   Twine(PrefixSize)));
+  CmdArgs.push_back(
+  Args.MakeArgString("-x86-pad-max-prefix-size=" + Twine(PrefixSize)));
 }
   }
 }
Index: clang/include/clang/Driver/Options.td
===
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -2187,7 +2187,8 @@
   HelpText<"Specify types of branches to align">;
 def malign_branch_boundary_EQ : Joined<["-"], "malign-branch-boundary=">, 
Group,

[PATCH] D77728: [Driver][X86] Add an alias for -mpad-max-prefix-size

2020-04-09 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 256250.
skan added a comment.

Rebase


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77728/new/

https://reviews.llvm.org/D77728

Files:
  clang/include/clang/Driver/Options.td
  clang/test/Driver/x86-malign-branch.c
  clang/test/Driver/x86-malign-branch.s


Index: clang/test/Driver/x86-malign-branch.s
===
--- clang/test/Driver/x86-malign-branch.s
+++ clang/test/Driver/x86-malign-branch.s
@@ -9,5 +9,7 @@
 // RUN: %clang -target x86_64 -mpad-max-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX
 // PREFIX: "-mllvm" "-x86-pad-max-prefix-size=5"
 
+// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX
+
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 
| FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
Index: clang/test/Driver/x86-malign-branch.c
===
--- clang/test/Driver/x86-malign-branch.c
+++ clang/test/Driver/x86-malign-branch.c
@@ -27,6 +27,9 @@
 // RUN: %clang -target x86_64 -mpad-max-prefix-size=6 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-6
 // PREFIX-6: invalid argument
 
+/// Test -malign-branch-prefix-size= for GCC compatibilty
+// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-5
+
 /// Test -mbranches-within-32B-boundaries
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 
| FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
Index: clang/include/clang/Driver/Options.td
===
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -2189,6 +2189,8 @@
   HelpText<"Specify the boundary's size to align branches">;
 def mpad_max_prefix_size_EQ : Joined<["-"], "mpad-max-prefix-size=">, 
Group, Flags<[DriverOption]>,
   HelpText<"Specify maximum number of prefixes to use for padding">;
+def malign_branch_prefix_size_EQ : Joined<["-"], 
"malign-branch-prefix-size=">, Group, 
Flags<[DriverOption]>,Alias,
+  HelpText<"Alias for -mpad-max-prefix-size">;// Alias for GCC compatibility
 def mbranches_within_32B_boundaries : Flag<["-"], 
"mbranches-within-32B-boundaries">, Flags<[DriverOption]>, Group,
   HelpText<"Align selected branches (fused, jcc, jmp) within 32-byte 
boundary">;
 def mfancy_math_387 : Flag<["-"], "mfancy-math-387">, 
Group;


Index: clang/test/Driver/x86-malign-branch.s
===
--- clang/test/Driver/x86-malign-branch.s
+++ clang/test/Driver/x86-malign-branch.s
@@ -9,5 +9,7 @@
 // RUN: %clang -target x86_64 -mpad-max-prefix-size=5 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX
 // PREFIX: "-mllvm" "-x86-pad-max-prefix-size=5"
 
+// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX
+
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 | FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
Index: clang/test/Driver/x86-malign-branch.c
===
--- clang/test/Driver/x86-malign-branch.c
+++ clang/test/Driver/x86-malign-branch.c
@@ -27,6 +27,9 @@
 // RUN: %clang -target x86_64 -mpad-max-prefix-size=6 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX-6
 // PREFIX-6: invalid argument
 
+/// Test -malign-branch-prefix-size= for GCC compatibilty
+// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX-5
+
 /// Test -mbranches-within-32B-boundaries
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 | FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
Index: clang/include/clang/Driver/Options.td
===
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -2189,6 +2189,8 @@
   HelpText<"Specify the boundary's size to align branches">;
 def mpad_max_prefix_size_EQ : Joined<["-"], "mpad-max-prefix-size=">, Group, Flags<[DriverOption]>,
   HelpText<"Specify maximum number of prefixes to use for padding">;
+def malign_branch_prefix_size_EQ : Joined<["-"], "malign-branch-prefix-size=">, Group, Flags<[DriverOption]>,Alias,
+  HelpText<"Alias for -mpad-max-prefix-size">;// Alias for GCC compatibility
 def mbranches_within_32B_boundaries : Flag<["-"], "mbranches-within-32B-boundaries">, Flags<[DriverOption]>, Group,
   HelpText<"Align selected branches (fused, jcc, jmp) within 32-byte boundary">;
 def mfancy_math_387 : Flag<["-"], "mfancy-math-387">, Group;
_

[PATCH] D77728: [Driver][X86] Add an alias for -mpad-max-prefix-size

2020-04-09 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 256268.
skan edited the summary of this revision.
skan added a comment.

Rebase(didn't rebase correctly last time)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77728/new/

https://reviews.llvm.org/D77728

Files:
  clang/include/clang/Driver/Options.td
  clang/test/Driver/x86-malign-branch.c
  clang/test/Driver/x86-malign-branch.s


Index: clang/test/Driver/x86-malign-branch.s
===
--- clang/test/Driver/x86-malign-branch.s
+++ clang/test/Driver/x86-malign-branch.s
@@ -9,5 +9,7 @@
 // RUN: %clang -target x86_64 -mpad-max-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX
 // PREFIX: "-mllvm" "-x86-pad-max-prefix-size=5"
 
+// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX
+
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 
| FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
Index: clang/test/Driver/x86-malign-branch.c
===
--- clang/test/Driver/x86-malign-branch.c
+++ clang/test/Driver/x86-malign-branch.c
@@ -24,6 +24,9 @@
 // RUN: %clang -target x86_64 -mpad-max-prefix-size=15 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-15
 // PREFIX-15: "-mllvm" "-x86-pad-max-prefix-size=15"
 
+/// Test -malign-branch-prefix-size= for GCC compatibilty
+// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-5
+
 /// Test -mbranches-within-32B-boundaries
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 
| FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
Index: clang/include/clang/Driver/Options.td
===
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -2189,6 +2189,8 @@
   HelpText<"Specify the boundary's size to align branches">;
 def mpad_max_prefix_size_EQ : Joined<["-"], "mpad-max-prefix-size=">, 
Group, Flags<[DriverOption]>,
   HelpText<"Specify maximum number of prefixes to use for padding">;
+def malign_branch_prefix_size_EQ : Joined<["-"], 
"malign-branch-prefix-size=">, Group, Flags<[DriverOption]>, 
Alias,
+  HelpText<"Alias for -mpad-max-prefix-size">;// Alias for GCC compatibility
 def mbranches_within_32B_boundaries : Flag<["-"], 
"mbranches-within-32B-boundaries">, Flags<[DriverOption]>, Group,
   HelpText<"Align selected branches (fused, jcc, jmp) within 32-byte 
boundary">;
 def mfancy_math_387 : Flag<["-"], "mfancy-math-387">, 
Group;


Index: clang/test/Driver/x86-malign-branch.s
===
--- clang/test/Driver/x86-malign-branch.s
+++ clang/test/Driver/x86-malign-branch.s
@@ -9,5 +9,7 @@
 // RUN: %clang -target x86_64 -mpad-max-prefix-size=5 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX
 // PREFIX: "-mllvm" "-x86-pad-max-prefix-size=5"
 
+// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX
+
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 | FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
Index: clang/test/Driver/x86-malign-branch.c
===
--- clang/test/Driver/x86-malign-branch.c
+++ clang/test/Driver/x86-malign-branch.c
@@ -24,6 +24,9 @@
 // RUN: %clang -target x86_64 -mpad-max-prefix-size=15 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX-15
 // PREFIX-15: "-mllvm" "-x86-pad-max-prefix-size=15"
 
+/// Test -malign-branch-prefix-size= for GCC compatibilty
+// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX-5
+
 /// Test -mbranches-within-32B-boundaries
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 | FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
Index: clang/include/clang/Driver/Options.td
===
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -2189,6 +2189,8 @@
   HelpText<"Specify the boundary's size to align branches">;
 def mpad_max_prefix_size_EQ : Joined<["-"], "mpad-max-prefix-size=">, Group, Flags<[DriverOption]>,
   HelpText<"Specify maximum number of prefixes to use for padding">;
+def malign_branch_prefix_size_EQ : Joined<["-"], "malign-branch-prefix-size=">, Group, Flags<[DriverOption]>, Alias,
+  HelpText<"Alias for -mpad-max-prefix-size">;// Alias for GCC compatibility
 def mbranches_within_32B_boundaries : Flag<["-"], "mbranches-within-32B-boundaries">, Flags<[DriverOption]>, Group,
   HelpText<"Align selected bran

[PATCH] D77728: [Driver][X86] Add an alias for -mpad-max-prefix-size

2020-04-09 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 256308.
skan added a comment.

Fix the tests after rebase


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77728/new/

https://reviews.llvm.org/D77728

Files:
  clang/include/clang/Driver/Options.td
  clang/test/Driver/x86-malign-branch.c
  clang/test/Driver/x86-malign-branch.s


Index: clang/test/Driver/x86-malign-branch.s
===
--- clang/test/Driver/x86-malign-branch.s
+++ clang/test/Driver/x86-malign-branch.s
@@ -9,5 +9,7 @@
 // RUN: %clang -target x86_64 -mpad-max-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX
 // PREFIX: "-mllvm" "-x86-pad-max-prefix-size=5"
 
+// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX
+
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 
| FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
Index: clang/test/Driver/x86-malign-branch.c
===
--- clang/test/Driver/x86-malign-branch.c
+++ clang/test/Driver/x86-malign-branch.c
@@ -24,6 +24,9 @@
 // RUN: %clang -target x86_64 -mpad-max-prefix-size=15 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-15
 // PREFIX-15: "-mllvm" "-x86-pad-max-prefix-size=15"
 
+/// Test -malign-branch-prefix-size= for GCC compatibilty
+// RUN: %clang -target x86_64 -malign-branch-prefix-size=15 %s -c -### 2>&1 | 
FileCheck %s --check-prefix=PREFIX-15
+
 /// Test -mbranches-within-32B-boundaries
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 
| FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
Index: clang/include/clang/Driver/Options.td
===
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -2189,6 +2189,8 @@
   HelpText<"Specify the boundary's size to align branches">;
 def mpad_max_prefix_size_EQ : Joined<["-"], "mpad-max-prefix-size=">, 
Group, Flags<[DriverOption]>,
   HelpText<"Specify maximum number of prefixes to use for padding">;
+def malign_branch_prefix_size_EQ : Joined<["-"], 
"malign-branch-prefix-size=">, Group, Flags<[DriverOption]>, 
Alias,
+  HelpText<"Alias for -mpad-max-prefix-size">;// Alias for GCC compatibility
 def mbranches_within_32B_boundaries : Flag<["-"], 
"mbranches-within-32B-boundaries">, Flags<[DriverOption]>, Group,
   HelpText<"Align selected branches (fused, jcc, jmp) within 32-byte 
boundary">;
 def mfancy_math_387 : Flag<["-"], "mfancy-math-387">, 
Group;


Index: clang/test/Driver/x86-malign-branch.s
===
--- clang/test/Driver/x86-malign-branch.s
+++ clang/test/Driver/x86-malign-branch.s
@@ -9,5 +9,7 @@
 // RUN: %clang -target x86_64 -mpad-max-prefix-size=5 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX
 // PREFIX: "-mllvm" "-x86-pad-max-prefix-size=5"
 
+// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX
+
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 | FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
Index: clang/test/Driver/x86-malign-branch.c
===
--- clang/test/Driver/x86-malign-branch.c
+++ clang/test/Driver/x86-malign-branch.c
@@ -24,6 +24,9 @@
 // RUN: %clang -target x86_64 -mpad-max-prefix-size=15 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX-15
 // PREFIX-15: "-mllvm" "-x86-pad-max-prefix-size=15"
 
+/// Test -malign-branch-prefix-size= for GCC compatibilty
+// RUN: %clang -target x86_64 -malign-branch-prefix-size=15 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX-15
+
 /// Test -mbranches-within-32B-boundaries
 // RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 | FileCheck %s --check-prefix=32B
 // 32B: "-mllvm" "-x86-branches-within-32B-boundaries"
Index: clang/include/clang/Driver/Options.td
===
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -2189,6 +2189,8 @@
   HelpText<"Specify the boundary's size to align branches">;
 def mpad_max_prefix_size_EQ : Joined<["-"], "mpad-max-prefix-size=">, Group, Flags<[DriverOption]>,
   HelpText<"Specify maximum number of prefixes to use for padding">;
+def malign_branch_prefix_size_EQ : Joined<["-"], "malign-branch-prefix-size=">, Group, Flags<[DriverOption]>, Alias,
+  HelpText<"Alias for -mpad-max-prefix-size">;// Alias for GCC compatibility
 def mbranches_within_32B_boundaries : Flag<["-"], "mbranches-within-32B-boundaries">, Flags<[DriverOption]>, Group,
   HelpText<"Align selected branches (fused, jcc, jmp) within 32-byte boundary">;
 de

[PATCH] D77728: [Driver][X86] Add an alias for -mpad-max-prefix-size

2020-04-12 Thread Kan Shengchen via Phabricator via cfe-commits
skan added a comment.

After careful consideration, I agree with @MaskRay ’s point of view that this 
alias is incorrect since they do different things. If there is no objection, I 
plan to abandon this revision.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77728/new/

https://reviews.llvm.org/D77728



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D81388: [TEST] TreeTest.cpp - Add a comma to avoid build error with -werror

2020-06-08 Thread Kan Shengchen via Phabricator via cfe-commits
skan created this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
skan added reviewers: gribozavr, hlopko, eduucaldas.

The macro `INSTANTIATE_TEST_CASE_P` is defined as

  \# define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator, ...) \
  ...

If we build the test case with -werror, we will get an error like

  error: ISO C++11 requires at least one argument for the "..." in a
  variadic macro
  
  testing::ValuesIn(TestClangConfig::allConfigs()));
  ^

This patch fixes that.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D81388

Files:
  clang/unittests/Tooling/Syntax/TreeTest.cpp


Index: clang/unittests/Tooling/Syntax/TreeTest.cpp
===
--- clang/unittests/Tooling/Syntax/TreeTest.cpp
+++ clang/unittests/Tooling/Syntax/TreeTest.cpp
@@ -2995,6 +2995,6 @@
 }
 
 INSTANTIATE_TEST_CASE_P(SyntaxTreeTests, SyntaxTreeTest,
-testing::ValuesIn(TestClangConfig::allConfigs()));
+testing::ValuesIn(TestClangConfig::allConfigs()), );
 
 } // namespace


Index: clang/unittests/Tooling/Syntax/TreeTest.cpp
===
--- clang/unittests/Tooling/Syntax/TreeTest.cpp
+++ clang/unittests/Tooling/Syntax/TreeTest.cpp
@@ -2995,6 +2995,6 @@
 }
 
 INSTANTIATE_TEST_CASE_P(SyntaxTreeTests, SyntaxTreeTest,
-testing::ValuesIn(TestClangConfig::allConfigs()));
+testing::ValuesIn(TestClangConfig::allConfigs()), );
 
 } // namespace
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D81388: [TEST] TreeTest.cpp - Add a comma to avoid build error with -werror

2020-06-08 Thread Kan Shengchen via Phabricator via cfe-commits
skan added a comment.

Related revision: D80822 


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D81388/new/

https://reviews.llvm.org/D81388



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D81388: [TEST] TreeTest.cpp - Add a comma to avoid build error with -werror

2020-06-08 Thread Kan Shengchen via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG2c63ea6eded3: [TEST] TreeTest.cpp - Add a comma to avoid 
build error with -werror (authored by skan).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D81388/new/

https://reviews.llvm.org/D81388

Files:
  clang/unittests/Tooling/Syntax/TreeTest.cpp


Index: clang/unittests/Tooling/Syntax/TreeTest.cpp
===
--- clang/unittests/Tooling/Syntax/TreeTest.cpp
+++ clang/unittests/Tooling/Syntax/TreeTest.cpp
@@ -2995,6 +2995,6 @@
 }
 
 INSTANTIATE_TEST_CASE_P(SyntaxTreeTests, SyntaxTreeTest,
-testing::ValuesIn(TestClangConfig::allConfigs()));
+testing::ValuesIn(TestClangConfig::allConfigs()), );
 
 } // namespace


Index: clang/unittests/Tooling/Syntax/TreeTest.cpp
===
--- clang/unittests/Tooling/Syntax/TreeTest.cpp
+++ clang/unittests/Tooling/Syntax/TreeTest.cpp
@@ -2995,6 +2995,6 @@
 }
 
 INSTANTIATE_TEST_CASE_P(SyntaxTreeTests, SyntaxTreeTest,
-testing::ValuesIn(TestClangConfig::allConfigs()));
+testing::ValuesIn(TestClangConfig::allConfigs()), );
 
 } // namespace
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D120395: [X86] Prohibit arithmetic operations on type `__bfloat16`

2022-03-16 Thread Kan Shengchen via Phabricator via cfe-commits
skan added a comment.

In D120395#3365622 , @craig.topper 
wrote:

>> So at this point we have these options:
>>
>> 1. Make the `__m[128|256|512]bh` types aliases of `__m[128|256|512]i`
>> 2. Deprecate the `__m[128|256|512]bh` types and replace them with 
>> `__m[128|256|512]i`
>> 3. Add load/store/insert/extract intrinsics for the `__bfloat16` type
>>
>> Of these, I'd prefer the third option because both of the first two require 
>> the an overloaded use of the vector-integer type. I already don't like that 
>> we use the same type for any size integer vector. Using it for BF16 vectors 
>> just seems wrong.
>
> The third option also needs bitcast intrinsics to/from the same sized ps/pd/i 
> type. We have similar casts between the other 3 types already.

If we'd like to not conflict with future bf16 ABI, the second option is the 
right direction.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D120395/new/

https://reviews.llvm.org/D120395

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D119846: [NFC][MC] remove unused argument `MCRegisterInfo` in `MCCodeEmitter`

2022-02-15 Thread Kan Shengchen via Phabricator via cfe-commits
skan accepted this revision.
skan added a comment.
This revision is now accepted and ready to land.

`MCRegisterInfo` is not used b/c it can be got from `MCContext`. It makes sense 
to remove it in the parameters.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D119846/new/

https://reviews.llvm.org/D119846

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D119846: [NFC][MC] remove unused argument `MCRegisterInfo` in `MCCodeEmitter`

2022-02-15 Thread Kan Shengchen via Phabricator via cfe-commits
skan added a comment.

@achieveartificialintelligence  Please explain why a patch is reverted in the 
commit message next time.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D119846/new/

https://reviews.llvm.org/D119846

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D124435: [X86] Always extend the integer parameters in callee

2022-04-26 Thread Kan Shengchen via Phabricator via cfe-commits
skan added a comment.

Should we update the `clang/docs/ReleaseNotes.rst` for this?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D124435/new/

https://reviews.llvm.org/D124435

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D107082: [X86][RFC][WIP] Enable `_Float16` type support on X86 following the psABI

2022-05-24 Thread Kan Shengchen via Phabricator via cfe-commits
skan added inline comments.



Comment at: llvm/docs/ReleaseNotes.rst:136
 
-* ...
+* Support ``half`` type on SSE2 and above targets.
 

Just for curiosity, why is SSE2?



Comment at: llvm/lib/Target/X86/X86ISelLowering.cpp:593
 
+// Half type will be promoted by default.
+setOperationAction(ISD::FABS, MVT::f16, Promote);

Promote to which type?



Comment at: llvm/lib/Target/X86/X86ISelLowering.cpp:5714
   return VT == MVT::f32 || VT == MVT::f64 || VT.isVector() ||
- (VT == MVT::f16 && Subtarget.hasFP16());
+ (VT == MVT::f16 && Subtarget.hasBWI());
 }

Add comments for `hasBWI`?



Comment at: llvm/lib/Target/X86/X86ISelLowering.cpp:5726
   return (VT == MVT::f64 && Subtarget.hasSSE2()) ||
- (VT == MVT::f32 && Subtarget.hasSSE1()) ||
- (VT == MVT::f16 && Subtarget.hasFP16());
+ (VT == MVT::f32 && Subtarget.hasSSE1()) || VT == MVT::f16;
 }

Why is this diffferent from `isScalarFPTypeInSSEReg` in X86FastISel.cpp?

``` 
bool isScalarFPTypeInSSEReg(EVT VT) const {
return ((VT == MVT::f16 || VT == MVT::f64) && Subtarget->hasSSE2()) ||
   (VT == MVT::f32 && Subtarget->hasSSE1());
  }
```



Comment at: llvm/lib/Target/X86/X86ISelLowering.cpp:20809
 
+  if (VT == MVT::f16 && !Subtarget.hasFP16())
+return SDValue();

Need comments



Comment at: llvm/lib/Target/X86/X86ISelLowering.cpp:21277
 
-  if (DstVT == MVT::f128)
+  if (DstVT == MVT::f128 || (DstVT == MVT::f16 && !Subtarget.hasFP16()))
 return SDValue();

Need comments



Comment at: llvm/lib/Target/X86/X86InstrAVX512.td:4101
+  X86VectorVTInfo _, Predicate prd = HasAVX512> {
+  let Predicates = !if (!eq (prd, HasFP16), [HasFP16], [prd, OptForSize]) in
   def rr : AVX512PI<0x10, MRMSrcReg, (outs _.RC:$dst),

Why do we need compare the `prd` w/ `HasFP16` here?
Couldn't we just use `[prd, OptForSize]`?



Comment at: llvm/lib/Target/X86/X86RegisterInfo.td:540
 
+def FR16 : RegisterClass<"X86", [f16], 16, (add FR32)> {let Size = 32;}
+

The alignment is not same as the size?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D107082/new/

https://reviews.llvm.org/D107082

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D72227: Add options for clang to align branches within 32B boundary

2020-01-05 Thread Kan Shengchen via Phabricator via cfe-commits
skan created this revision.
skan added reviewers: craig.topper, LuoYuanke, annita.zhang, jyknight, reames, 
MaskRay.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

  Add an option -mbranches-within-32B-boundaries to align branches within a
  32-Byte boundary to reduce the potential performance loss of the microcode
  update. The option is equivalent to the combination of three options:
  
  -malign-branch-boundary=32
  -malign-branch=fused+jcc+jmp
  -malign-branch-prefix-size=4
  
  More fine options added for clang:
  1. -malign-branch-boundary=NUM aligns branches within NUM byte boundary.
  2. -malign-branch=TYPE[+TYPE...] specifies types of branches to align.
  3. -malign-branch-prefix-size=NUM limits the prefix size by NUM
  per instruction.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D72227

Files:
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/test/Driver/intel-align-branch.c

Index: clang/test/Driver/intel-align-branch.c
===
--- /dev/null
+++ clang/test/Driver/intel-align-branch.c
@@ -0,0 +1,35 @@
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-boundary=32 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-BOUNDARY
+// CHECK-BOUNDARY: "-mllvm" "-x86-align-branch-boundary=32"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=jcc -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-JCC
+// CHECK-JCC: "-mllvm" "-x86-align-branch=jcc"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=fused -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-FUSED
+// CHECK-FUSED: "-mllvm" "-x86-align-branch=fused"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=jmp -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-JMP
+// CHECK-JMP: "-mllvm" "-x86-align-branch=jmp"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=call -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-CALL
+// CHECK-CALL: "-mllvm" "-x86-align-branch=call"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=ret -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-RET
+// CHECK-RET: "-mllvm" "-x86-align-branch=ret"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=indirect -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-INDIRECT
+// CHECK-INDIRECT: "-mllvm" "-x86-align-branch=indirect"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=fused+jcc+jmp+ret+call+indirect -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-BRANCH
+// CHECK-BRANCH: "-mllvm" "-x86-align-branch=fused+jcc+jmp+ret+call+indirect"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-prefix-size=4 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-PREFIX
+// CHECK-PREFIX: "-mllvm" "-x86-align-branch-prefix-size=4"
+//
+// // RUN: %clang -target x86_64-unknown-unknown -mbranches-within-32B-boundaries -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-TOTAL
+// CHECK-TOTAL: "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" "-x86-align-branch=fused+jcc+jmp" "-mllvm" "-x86-align-branch-prefix-size=4"
+//
+// RUN: %clang -target x86_64-unknown-unknown -mno-branches-within-32B-boundaries -mbranches-within-32B-boundaries -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-TOTAL2
+// CHECK-TOTAL2: "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" "-x86-align-branch=fused+jcc+jmp" "-mllvm" "-x86-align-branch-prefix-size=4"
+//
+// RUN: %clang -target x86_64-unknown-unknown -mbranches-within-32B-boundaries -mno-branches-within-32B-boundaries -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-TOTAL3
+// CHECK-TOTAL3-NOT: "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" "-x86-align-branch=fused+jcc+jmp" "-mllvm" "-x86-align-branch-prefix-size=4"
Index: clang/lib/Driver/ToolChains/Clang.cpp
===
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -2007,8 +2007,55 @@
 CmdArgs.push_back("-mpacked-stack");
 }
 
+static void AlignBranchesOptions(const Driver &D, const ArgList &Args,
+ ArgStringList &CmdArgs) {
+  if (const Arg *A = Args.getLastArg(options::OPT_malign_branch_boundary_EQ)) {
+StringRef Value = A->getValue();
+uint64_t Num;
+if (!Value.getAsInteger(10, Num) && Num >= 32 && llvm::isPowerOf2_64(Num)) {
+  CmdArgs.push_back("-mllvm");
+  CmdArgs.push_back(
+  Args.MakeArgString("-x86-align-branch-boundary=" + Value));
+} else {
+  D.Diag(diag::err_drv_unsupported_option_argument)
+  << A->getOption().getName() << Value;
+}
+  }
+
+  if (const Arg *A = Args.getLastArg(options::OPT_malign_branch_EQ)) {
+StringRef Value = A->getValue();
+CmdArgs.push_back("-mllvm");
+CmdArgs.push_back(Args.MakeArgString("-x86-align-branch=" + Value));
+  }
+
+  if (const Arg *A =
+  Args.getLastArg(options::OPT_malig

[PATCH] D72227: Add options for clang to align branches within 32B boundary

2020-01-05 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 236280.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72227/new/

https://reviews.llvm.org/D72227

Files:
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/test/Driver/intel-align-branch.c

Index: clang/test/Driver/intel-align-branch.c
===
--- /dev/null
+++ clang/test/Driver/intel-align-branch.c
@@ -0,0 +1,35 @@
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-boundary=32 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-BOUNDARY
+// CHECK-BOUNDARY: "-mllvm" "-x86-align-branch-boundary=32"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=jcc -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-JCC
+// CHECK-JCC: "-mllvm" "-x86-align-branch=jcc"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=fused -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-FUSED
+// CHECK-FUSED: "-mllvm" "-x86-align-branch=fused"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=jmp -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-JMP
+// CHECK-JMP: "-mllvm" "-x86-align-branch=jmp"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=call -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-CALL
+// CHECK-CALL: "-mllvm" "-x86-align-branch=call"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=ret -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-RET
+// CHECK-RET: "-mllvm" "-x86-align-branch=ret"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=indirect -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-INDIRECT
+// CHECK-INDIRECT: "-mllvm" "-x86-align-branch=indirect"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=fused+jcc+jmp+ret+call+indirect -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-BRANCH
+// CHECK-BRANCH: "-mllvm" "-x86-align-branch=fused+jcc+jmp+ret+call+indirect"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-prefix-size=4 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-PREFIX
+// CHECK-PREFIX: "-mllvm" "-x86-align-branch-prefix-size=4"
+//
+// // RUN: %clang -target x86_64-unknown-unknown -mbranches-within-32B-boundaries -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-TOTAL
+// CHECK-TOTAL: "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" "-x86-align-branch=fused+jcc+jmp" "-mllvm" "-x86-align-branch-prefix-size=4"
+//
+// RUN: %clang -target x86_64-unknown-unknown -mno-branches-within-32B-boundaries -mbranches-within-32B-boundaries -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-TOTAL2
+// CHECK-TOTAL2: "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" "-x86-align-branch=fused+jcc+jmp" "-mllvm" "-x86-align-branch-prefix-size=4"
+//
+// RUN: %clang -target x86_64-unknown-unknown -mbranches-within-32B-boundaries -mno-branches-within-32B-boundaries -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-TOTAL3
+// CHECK-TOTAL3-NOT: "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" "-x86-align-branch=fused+jcc+jmp" "-mllvm" "-x86-align-branch-prefix-size=4"
Index: clang/lib/Driver/ToolChains/Clang.cpp
===
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -2007,8 +2007,55 @@
 CmdArgs.push_back("-mpacked-stack");
 }
 
+static void AlignBranchesOptions(const Driver &D, const ArgList &Args,
+ ArgStringList &CmdArgs) {
+  if (const Arg *A = Args.getLastArg(options::OPT_malign_branch_boundary_EQ)) {
+StringRef Value = A->getValue();
+uint64_t Num;
+if (!Value.getAsInteger(10, Num) && Num >= 32 && llvm::isPowerOf2_64(Num)) {
+  CmdArgs.push_back("-mllvm");
+  CmdArgs.push_back(
+  Args.MakeArgString("-x86-align-branch-boundary=" + Value));
+} else {
+  D.Diag(diag::err_drv_unsupported_option_argument)
+  << A->getOption().getName() << Value;
+}
+  }
+
+  if (const Arg *A = Args.getLastArg(options::OPT_malign_branch_EQ)) {
+StringRef Value = A->getValue();
+CmdArgs.push_back("-mllvm");
+CmdArgs.push_back(Args.MakeArgString("-x86-align-branch=" + Value));
+  }
+
+  if (const Arg *A =
+  Args.getLastArg(options::OPT_malign_branch_prefix_size_EQ)) {
+StringRef Value = A->getValue();
+uint8_t Num;
+if (!Value.getAsInteger(10, Num) && Num <= 4) {
+  CmdArgs.push_back("-mllvm");
+  CmdArgs.push_back(
+  Args.MakeArgString("-x86-align-branch-prefix-size=" + Value));
+} else {
+  D.Diag(diag::err_drv_unsupported_option_argument)
+  << A->getOption().getName() << Value;
+}
+  }
+
+  if (Args.hasFlag(options::OPT_mbranches_within_32B_boundaries,
+   options::OPT_mno_branches_within_32B_boundaries, false)) {
+CmdArgs.push_back("-mllvm");
+CmdArgs.push_back(Args.MakeArgString("-x86-align-branch-boundary=32"));
+CmdArgs.push_back("-mllvm");
+CmdArgs.pu

[PATCH] D72247: Add Triple::isX86()

2020-01-06 Thread Kan Shengchen via Phabricator via cfe-commits
skan accepted this revision.
skan added a comment.
This revision is now accepted and ready to land.

LGTM


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72247/new/

https://reviews.llvm.org/D72247



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D72227: Add options for clang to align branches within 32B boundary

2020-01-06 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 236329.
skan marked 5 inline comments as done.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72227/new/

https://reviews.llvm.org/D72227

Files:
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/test/Driver/intel-align-branch.c

Index: clang/test/Driver/intel-align-branch.c
===
--- /dev/null
+++ clang/test/Driver/intel-align-branch.c
@@ -0,0 +1,32 @@
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-boundary=32 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-BOUNDARY
+// CHECK-BOUNDARY: "-mllvm" "-x86-align-branch-boundary=32"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=jcc -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-JCC
+// CHECK-JCC: "-mllvm" "-x86-align-branch=jcc"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=fused -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-FUSED
+// CHECK-FUSED: "-mllvm" "-x86-align-branch=fused"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=jmp -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-JMP
+// CHECK-JMP: "-mllvm" "-x86-align-branch=jmp"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=call -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-CALL
+// CHECK-CALL: "-mllvm" "-x86-align-branch=call"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=ret -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-RET
+// CHECK-RET: "-mllvm" "-x86-align-branch=ret"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=indirect -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-INDIRECT
+// CHECK-INDIRECT: "-mllvm" "-x86-align-branch=indirect"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=fused+jcc+jmp+ret+call+indirect -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-BRANCH
+// CHECK-BRANCH: "-mllvm" "-x86-align-branch=fused+jcc+jmp+ret+call+indirect"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-prefix-size=4 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-PREFIX
+// CHECK-PREFIX: "-mllvm" "-x86-align-branch-prefix-size=4"
+//
+// RUN: %clang -target x86_64-unknown-unknown -mno-branches-within-32B-boundaries -mbranches-within-32B-boundaries -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-TOTAL1
+// CHECK-TOTAL1: "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" "-x86-align-branch=fused+jcc+jmp" "-mllvm" "-x86-align-branch-prefix-size=4"
+//
+// RUN: %clang -target x86_64-unknown-unknown -mbranches-within-32B-boundaries -mno-branches-within-32B-boundaries -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-TOTAL2
+// CHECK-TOTAL2-NOT: "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" "-x86-align-branch=fused+jcc+jmp" "-mllvm" "-x86-align-branch-prefix-size=4"
Index: clang/lib/Driver/ToolChains/Clang.cpp
===
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -2007,8 +2007,55 @@
 CmdArgs.push_back("-mpacked-stack");
 }
 
+static void alignBranchesOptions(const Driver &D, const ArgList &Args,
+ ArgStringList &CmdArgs) {
+  if (const Arg *A = Args.getLastArg(options::OPT_malign_branch_boundary_EQ)) {
+StringRef Value = A->getValue();
+uint64_t Num;
+if (!Value.getAsInteger(10, Num) && Num >= 32 && llvm::isPowerOf2_64(Num)) {
+  CmdArgs.push_back("-mllvm");
+  CmdArgs.push_back(
+  Args.MakeArgString("-x86-align-branch-boundary=" + Value));
+} else {
+  D.Diag(diag::err_drv_unsupported_option_argument)
+  << A->getOption().getName() << Value;
+}
+  }
+
+  if (const Arg *A = Args.getLastArg(options::OPT_malign_branch_EQ)) {
+StringRef Value = A->getValue();
+CmdArgs.push_back("-mllvm");
+CmdArgs.push_back(Args.MakeArgString("-x86-align-branch=" + Value));
+  }
+
+  if (const Arg *A =
+  Args.getLastArg(options::OPT_malign_branch_prefix_size_EQ)) {
+StringRef Value = A->getValue();
+uint8_t Num;
+if (!Value.getAsInteger(10, Num) && Num <= 4) {
+  CmdArgs.push_back("-mllvm");
+  CmdArgs.push_back(
+  Args.MakeArgString("-x86-align-branch-prefix-size=" + Value));
+} else {
+  D.Diag(diag::err_drv_unsupported_option_argument)
+  << A->getOption().getName() << Value;
+}
+  }
+
+  if (Args.hasFlag(options::OPT_mbranches_within_32B_boundaries,
+   options::OPT_mno_branches_within_32B_boundaries, false)) {
+CmdArgs.push_back("-mllvm");
+CmdArgs.push_back(Args.MakeArgString("-x86-align-branch-boundary=32"));
+CmdArgs.push_back("-mllvm");
+CmdArgs.push_back(Args.MakeArgString("-x86-align-branch=fused+jcc+jmp"));
+CmdArgs.push_back("-mllvm");
+CmdArgs.push_back(Args.MakeArgString("-x86-align-branch-prefix-size=4"));
+  }
+}
+
 void Clang::AddX86TargetArgs(const ArgList &Args,

[PATCH] D72227: Add options for clang to align branches within 32B boundary

2020-01-06 Thread Kan Shengchen via Phabricator via cfe-commits
skan added inline comments.



Comment at: clang/lib/Driver/ToolChains/Clang.cpp:2012
+ ArgStringList &CmdArgs) {
+  if (const Arg *A = Args.getLastArg(options::OPT_malign_branch_boundary_EQ)) {
+StringRef Value = A->getValue();

MaskRay wrote:
> if (!TC.getTriple().isX86()) {
>   D.Diag(diag::err_drv_unsupported_opt_for_target)
>   << A->getAsString(Args) << TripleStr;
> return;
>   }
> 
> I will add Triple::isX86 in D72247.
Is this check necessary?  `alignBranchesOptions` is only called by 
`Clang::AddX86TargetArgs` and `ClangAs::AddX86TargetArgs`, so the triple is 
always X86. 

If `-target aarch64` is passed, `-mbranches-within-32B-boundaries` will not be 
consumed and user can get an warning. So is `-malign-branch` etc.

> clang-10: warning: argument unused during compilation: 
> '-mbranches-within-32B-boundaries' [-Wunused-command-line-argument]





Comment at: clang/lib/Driver/ToolChains/Clang.cpp:2045
+
+  if (Args.hasFlag(options::OPT_mbranches_within_32B_boundaries,
+   options::OPT_mno_branches_within_32B_boundaries, false)) {

MaskRay wrote:
> `OPT_mbranches_within_32B_boundaries` should provide default values which can 
> be overridden by more specific options.
Currently, `-mbranches-within-32B-boundaries` is equivalent to 
`-malign-branch-boundary=32 -malign-branch=fused+jcc+jmp 
-malign-branch-prefix-size=4

What is expected behaviour would be very confusing if specific options could 
override `-mbranches-within-32B-boundaries`. For example, if passed options are

```
-mbranches-within-32B-boundaries -malign-branch-boundary=32 
-mno-branches-within-32B-boundaries
```
What should the value of `-malign-branch-boundary` be?  Is it 32 or 0?

If we think `-mno-branches-within-32B-boundaries` is the negative form of 
`-mbranches-within-32B-boundaries` , then `-malign-branch-boundary` should be 
32.

Or if we think `-mno-branches-within-32B-boundaries` wins since it appears at 
the end, and `-mno-branches-within-32B-boundaries` means no need to align 
branches, `-malign-branch-boundary` should be 0.

As long as we don't support specific options could override 
`-mbranches-within-32B-boundaries`, the trouble disappears  :-)





Comment at: clang/test/Driver/intel-align-branch.c:28
+//
+// // RUN: %clang -target x86_64-unknown-unknown 
-mbranches-within-32B-boundaries -### -c %s 2>&1 | FileCheck %s 
--check-prefix=CHECK-TOTAL
+// CHECK-TOTAL: "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" 
"-x86-align-branch=fused+jcc+jmp" "-mllvm" "-x86-align-branch-prefix-size=4"

MaskRay wrote:
> Since you have a `-mno.. -m..` test, the `-m..` test is redundant.
Done



Comment at: clang/test/Driver/intel-align-branch.c:35
+// RUN: %clang -target x86_64-unknown-unknown -mbranches-within-32B-boundaries 
-mno-branches-within-32B-boundaries -### -c %s 2>&1 | FileCheck %s 
--check-prefix=CHECK-TOTAL3
+// CHECK-TOTAL3-NOT: "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" 
"-x86-align-branch=fused+jcc+jmp" "-mllvm" "-x86-align-branch-prefix-size=4"

MaskRay wrote:
> Add a `-target aarch64` test that other targets will get an error.
> 
> (I am lazy and usually just write `-target x86_64` (generic ELF) and omit 
> `-unknown-known`)
Currently, if  `-target aarch64` is passed to clang, we will get a warning 

> clang-10: warning: argument unused during compilation: 
> '-mbranches-within-32B-boundaries' [-Wunused-command-line-argument]

Is this prompt not clear enough?



CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72227/new/

https://reviews.llvm.org/D72227



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D72227: Add options for clang to align branches within 32B boundary

2020-01-07 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 236547.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72227/new/

https://reviews.llvm.org/D72227

Files:
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/test/Driver/intel-align-branch.c

Index: clang/test/Driver/intel-align-branch.c
===
--- /dev/null
+++ clang/test/Driver/intel-align-branch.c
@@ -0,0 +1,37 @@
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-boundary=32 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-BOUNDARY
+// CHECK-BOUNDARY: "-mllvm" "-x86-align-branch-boundary=32"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=jcc -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-JCC
+// CHECK-JCC: "-mllvm" "-x86-align-branch=jcc"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=fused -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-FUSED
+// CHECK-FUSED: "-mllvm" "-x86-align-branch=fused"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=jmp -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-JMP
+// CHECK-JMP: "-mllvm" "-x86-align-branch=jmp"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=call -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-CALL
+// CHECK-CALL: "-mllvm" "-x86-align-branch=call"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=ret -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-RET
+// CHECK-RET: "-mllvm" "-x86-align-branch=ret"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=indirect -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-INDIRECT
+// CHECK-INDIRECT: "-mllvm" "-x86-align-branch=indirect"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=fused+jcc+jmp+ret+call+indirect -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-BRANCH
+// CHECK-BRANCH: "-mllvm" "-x86-align-branch=fused+jcc+jmp+ret+call+indirect"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-prefix-size=4 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-PREFIX
+// CHECK-PREFIX: "-mllvm" "-x86-align-branch-prefix-size=4"
+//
+// RUN: %clang -target x86_64-unknown-unknown -mno-branches-within-32B-boundaries -mbranches-within-32B-boundaries -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-TOTAL1
+// CHECK-TOTAL1: "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" "-x86-align-branch=fused+jcc+jmp" "-mllvm" "-x86-align-branch-prefix-size=5"
+//
+// RUN: %clang -target x86_64-unknown-unknown -mbranches-within-32B-boundaries -mno-branches-within-32B-boundaries -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-TOTAL2
+// CHECK-TOTAL2-NOT: "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" "-x86-align-branch=fused+jcc+jmp" "-mllvm" "-x86-align-branch-prefix-size=5"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-boundary=7 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=jump -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-prefix-size=15 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR
+// CHECK-ERROR: error: unsupported argument
Index: clang/lib/Driver/ToolChains/Clang.cpp
===
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -2007,8 +2007,64 @@
 CmdArgs.push_back("-mpacked-stack");
 }
 
+static void alignBranchesOptions(const Driver &D, const ArgList &Args,
+ ArgStringList &CmdArgs) {
+  if (const Arg *A = Args.getLastArg(options::OPT_malign_branch_boundary_EQ)) {
+StringRef Value = A->getValue();
+uint64_t Num;
+if (!Value.getAsInteger(10, Num) && Num >= 32 && llvm::isPowerOf2_64(Num)) {
+  CmdArgs.push_back("-mllvm");
+  CmdArgs.push_back(
+  Args.MakeArgString("-x86-align-branch-boundary=" + Value));
+} else {
+  D.Diag(diag::err_drv_unsupported_option_argument)
+  << A->getOption().getName() << Value;
+}
+  }
+
+  if (const Arg *A = Args.getLastArg(options::OPT_malign_branch_EQ)) {
+StringRef Value = A->getValue();
+SmallVector BranchTypes;
+Value.split(BranchTypes, '+', -1, false);
+for (auto BranchType : BranchTypes) {
+  if (BranchType != "fused" && BranchType != "jcc" && BranchType != "jmp" &&
+  BranchType != "call" && BranchType != "ret" &&
+  BranchType != "indirect")
+D.Diag(diag::err_drv_unsupported_option_argument)
+<< A->getOption().getName() << Value;
+}
+CmdArgs.push_back("-mllvm");
+CmdArgs.push_back(Args.MakeArgString("-x86-align-branch=" + Value));
+  }
+
+  if (const Arg *A =
+  Args.getLastArg(options::OPT_malign_branch_prefix_size_EQ)) {
+StringRef Value = A->getValue();
+uint8_t Num;
+if (!Value.getAsInteger(10, Num) && Num <= 5) {
+  Cmd

[PATCH] D72227: Add options for clang to align branches within 32B boundary

2020-01-07 Thread Kan Shengchen via Phabricator via cfe-commits
skan marked 5 inline comments as done.
skan added inline comments.



Comment at: clang/include/clang/Driver/Options.td:2217
+  HelpText<"Specify the maximum number of prefixes on an instruction to "
+   "align branches. The number should be between 0 and 4.">;
+def mbranches_within_32B_boundaries

annita.zhang wrote:
> Is there an upbound for this parameter?
yes, both upbound and default value is 5


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72227/new/

https://reviews.llvm.org/D72227



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D72227: Add options for clang to align branches within 32B boundary

2020-01-08 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 236945.
skan marked an inline comment as done.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72227/new/

https://reviews.llvm.org/D72227

Files:
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/test/Driver/intel-align-branch.c

Index: clang/test/Driver/intel-align-branch.c
===
--- /dev/null
+++ clang/test/Driver/intel-align-branch.c
@@ -0,0 +1,43 @@
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-boundary=32 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-BOUNDARY
+// CHECK-BOUNDARY: "-mllvm" "-x86-align-branch-boundary=32"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=jcc -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-JCC
+// CHECK-JCC: "-mllvm" "-x86-align-branch=jcc"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=fused -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-FUSED
+// CHECK-FUSED: "-mllvm" "-x86-align-branch=fused"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=jmp -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-JMP
+// CHECK-JMP: "-mllvm" "-x86-align-branch=jmp"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=call -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-CALL
+// CHECK-CALL: "-mllvm" "-x86-align-branch=call"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=ret -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-RET
+// CHECK-RET: "-mllvm" "-x86-align-branch=ret"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=indirect -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-INDIRECT
+// CHECK-INDIRECT: "-mllvm" "-x86-align-branch=indirect"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=fused+jcc+jmp+ret+call+indirect -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-BRANCH
+// CHECK-BRANCH: "-mllvm" "-x86-align-branch=fused+jcc+jmp+ret+call+indirect"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-prefix-size=4 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-PREFIX
+// CHECK-PREFIX: "-mllvm" "-x86-align-branch-prefix-size=4"
+//
+// RUN: %clang -target x86_64-unknown-unknown -mno-branches-within-32B-boundaries -mbranches-within-32B-boundaries -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-TOTAL1
+// CHECK-TOTAL1: "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" "-x86-align-branch=fused+jcc+jmp" "-mllvm" "-x86-align-branch-prefix-size=5"
+//
+// RUN: %clang -target x86_64-unknown-unknown -mbranches-within-32B-boundaries -mno-branches-within-32B-boundaries -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-TOTAL2
+// CHECK-TOTAL2-NOT: "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" "-x86-align-branch=fused+jcc+jmp" "-mllvm" "-x86-align-branch-prefix-size=5"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-boundary=7 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=jump -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-prefix-size=15 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR
+// CHECK-ERROR: error: unsupported argument
+//
+// RUN: %clang -target aarch64-unknown-unknown -malign-branch-boundary=7 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-WARNING
+// RUN: %clang -target aarch64-unknown-unknown -malign-branch=jump -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-WARNING
+// RUN: %clang -target aarch64-unknown-unknown -malign-branch-prefix-size=15 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-WARNING
+// RUN: %clang -target aarch64-unknown-unknown -mbranches-within-32B-boundaries -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-WARNING
+// CHECK-WARNING: warning: argument unused
Index: clang/lib/Driver/ToolChains/Clang.cpp
===
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -2012,8 +2012,64 @@
 CmdArgs.push_back("-mpacked-stack");
 }
 
+static void alignBranchesOptions(const Driver &D, const ArgList &Args,
+ ArgStringList &CmdArgs) {
+  if (const Arg *A = Args.getLastArg(options::OPT_malign_branch_boundary_EQ)) {
+StringRef Value = A->getValue();
+uint64_t Num;
+if (!Value.getAsInteger(10, Num) && Num >= 32 && llvm::isPowerOf2_64(Num)) {
+  CmdArgs.push_back("-mllvm");
+  CmdArgs.push_back(
+  Args.MakeArgString("-x86-align-branch-boundary=" + Value));
+} else {
+  D.Diag(diag::err_drv_unsupported_option_argument)
+  << A->getOption().getName() << Value;
+}
+  }
+
+  if (const Arg *A = Args.getLastArg(options::OPT_malign_branch_EQ)) {
+StringRef Value = A->getValue();
+SmallVector BranchTypes;
+Value.split(BranchTypes, '+', -1, false);
+for (auto BranchType : BranchType

[PATCH] D72227: Add options for clang to align branches within 32B boundary

2020-01-09 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 237019.
skan marked 5 inline comments as done.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72227/new/

https://reviews.llvm.org/D72227

Files:
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/test/Driver/intel-align-branch.c

Index: clang/test/Driver/intel-align-branch.c
===
--- /dev/null
+++ clang/test/Driver/intel-align-branch.c
@@ -0,0 +1,43 @@
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-boundary=32 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-BOUNDARY
+// CHECK-BOUNDARY: "-mllvm" "-x86-align-branch-boundary=32"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=jcc -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-JCC
+// CHECK-JCC: "-mllvm" "-x86-align-branch=jcc"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=fused -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-FUSED
+// CHECK-FUSED: "-mllvm" "-x86-align-branch=fused"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=jmp -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-JMP
+// CHECK-JMP: "-mllvm" "-x86-align-branch=jmp"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=call -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-CALL
+// CHECK-CALL: "-mllvm" "-x86-align-branch=call"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=ret -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-RET
+// CHECK-RET: "-mllvm" "-x86-align-branch=ret"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=indirect -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-INDIRECT
+// CHECK-INDIRECT: "-mllvm" "-x86-align-branch=indirect"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=fused+jcc+jmp+ret+call+indirect -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-BRANCH
+// CHECK-BRANCH: "-mllvm" "-x86-align-branch=fused+jcc+jmp+ret+call+indirect"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-prefix-size=4 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-PREFIX
+// CHECK-PREFIX: "-mllvm" "-x86-align-branch-prefix-size=4"
+//
+// RUN: %clang -target x86_64-unknown-unknown -mno-branches-within-32B-boundaries -mbranches-within-32B-boundaries -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-TOTAL1
+// CHECK-TOTAL1: "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" "-x86-align-branch=fused+jcc+jmp" "-mllvm" "-x86-align-branch-prefix-size=5"
+//
+// RUN: %clang -target x86_64-unknown-unknown -mbranches-within-32B-boundaries -mno-branches-within-32B-boundaries -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-TOTAL2
+// CHECK-TOTAL2-NOT: "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" "-x86-align-branch=fused+jcc+jmp" "-mllvm" "-x86-align-branch-prefix-size=5"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-boundary=7 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=jump -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-prefix-size=15 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR
+// CHECK-ERROR: error: unsupported argument
+//
+// RUN: %clang -target aarch64-unknown-unknown -malign-branch-boundary=7 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-WARNING
+// RUN: %clang -target aarch64-unknown-unknown -malign-branch=jump -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-WARNING
+// RUN: %clang -target aarch64-unknown-unknown -malign-branch-prefix-size=15 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-WARNING
+// RUN: %clang -target aarch64-unknown-unknown -mbranches-within-32B-boundaries -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-WARNING
+// CHECK-WARNING: warning: argument unused
Index: clang/lib/Driver/ToolChains/Clang.cpp
===
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -2012,8 +2012,64 @@
 CmdArgs.push_back("-mpacked-stack");
 }
 
+static void alignBranchesOptions(const Driver &D, const ArgList &Args,
+ ArgStringList &CmdArgs) {
+  if (const Arg *A = Args.getLastArg(options::OPT_malign_branch_boundary_EQ)) {
+StringRef Value = A->getValue();
+uint64_t Num;
+if (!Value.getAsInteger(10, Num) && Num >= 32 && llvm::isPowerOf2_64(Num)) {
+  CmdArgs.push_back("-mllvm");
+  CmdArgs.push_back(
+  Args.MakeArgString("-x86-align-branch-boundary=" + Value));
+} else {
+  D.Diag(diag::err_drv_unsupported_option_argument)
+  << A->getOption().getName() << Value;
+}
+  }
+
+  if (const Arg *A = Args.getLastArg(options::OPT_malign_branch_EQ)) {
+StringRef Value = A->getValue();
+SmallVector BranchTypes;
+Value.split(BranchTypes, '+', -1, false);
+for (auto BranchType : BranchType

[PATCH] D72227: Add options for clang to align branches within 32B boundary

2020-01-09 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 237245.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72227/new/

https://reviews.llvm.org/D72227

Files:
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/test/Driver/x86-malign-branch.c

Index: clang/test/Driver/x86-malign-branch.c
===
--- /dev/null
+++ clang/test/Driver/x86-malign-branch.c
@@ -0,0 +1,43 @@
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-boundary=32 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-BOUNDARY
+// CHECK-BOUNDARY: "-mllvm" "-x86-align-branch-boundary=32"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=jcc -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-JCC
+// CHECK-JCC: "-mllvm" "-x86-align-branch=jcc"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=fused -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-FUSED
+// CHECK-FUSED: "-mllvm" "-x86-align-branch=fused"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=jmp -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-JMP
+// CHECK-JMP: "-mllvm" "-x86-align-branch=jmp"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=call -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-CALL
+// CHECK-CALL: "-mllvm" "-x86-align-branch=call"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=ret -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-RET
+// CHECK-RET: "-mllvm" "-x86-align-branch=ret"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=indirect -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-INDIRECT
+// CHECK-INDIRECT: "-mllvm" "-x86-align-branch=indirect"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=fused+jcc+jmp+ret+call+indirect -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-BRANCH
+// CHECK-BRANCH: "-mllvm" "-x86-align-branch=fused+jcc+jmp+ret+call+indirect"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-prefix-size=4 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-PREFIX
+// CHECK-PREFIX: "-mllvm" "-x86-align-branch-prefix-size=4"
+//
+// RUN: %clang -target x86_64-unknown-unknown -mno-branches-within-32B-boundaries -mbranches-within-32B-boundaries -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-TOTAL1
+// CHECK-TOTAL1: "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" "-x86-align-branch=fused+jcc+jmp" "-mllvm" "-x86-align-branch-prefix-size=5"
+//
+// RUN: %clang -target x86_64-unknown-unknown -mbranches-within-32B-boundaries -mno-branches-within-32B-boundaries -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-TOTAL2
+// CHECK-TOTAL2-NOT: "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" "-x86-align-branch=fused+jcc+jmp" "-mllvm" "-x86-align-branch-prefix-size=5"
+//
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-boundary=7 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch=jump -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR
+// RUN: %clang -target x86_64-unknown-unknown -malign-branch-prefix-size=15 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR
+// CHECK-ERROR: error: unsupported argument
+//
+// RUN: %clang -target aarch64-unknown-unknown -malign-branch-boundary=7 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-WARNING
+// RUN: %clang -target aarch64-unknown-unknown -malign-branch=jump -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-WARNING
+// RUN: %clang -target aarch64-unknown-unknown -malign-branch-prefix-size=15 -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-WARNING
+// RUN: %clang -target aarch64-unknown-unknown -mbranches-within-32B-boundaries -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-WARNING
+// CHECK-WARNING: warning: argument unused
Index: clang/lib/Driver/ToolChains/Clang.cpp
===
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -2012,8 +2012,64 @@
 CmdArgs.push_back("-mpacked-stack");
 }
 
+static void alignBranchesOptions(const Driver &D, const ArgList &Args,
+ ArgStringList &CmdArgs) {
+  if (const Arg *A = Args.getLastArg(options::OPT_malign_branch_boundary_EQ)) {
+StringRef Value = A->getValue();
+uint64_t Num;
+if (!Value.getAsInteger(10, Num) && Num >= 32 && llvm::isPowerOf2_64(Num)) {
+  CmdArgs.push_back("-mllvm");
+  CmdArgs.push_back(
+  Args.MakeArgString("-x86-align-branch-boundary=" + Value));
+} else {
+  D.Diag(diag::err_drv_unsupported_option_argument)
+  << A->getOption().getName() << Value;
+}
+  }
+
+  if (const Arg *A = Args.getLastArg(options::OPT_malign_branch_EQ)) {
+StringRef Value = A->getValue();
+SmallVector BranchTypes;
+Value.split(BranchTypes, '+', -1, false);
+for (auto BranchType : BranchTypes) {
+  if (BranchType != "fused" && B

[PATCH] D72227: Add options for clang to align branches within 32B boundary

2020-01-09 Thread Kan Shengchen via Phabricator via cfe-commits
skan marked an inline comment as done.
skan added inline comments.



Comment at: clang/include/clang/Driver/Options.td:2200
+  "Control how the assembler should align branches with NOP or segment 
"
+  "override prefix. If the boundary's size is not 0, it should be a "
+  "power of 2 and no less than 32. Branches will be aligned to prevent 
"

MaskRay wrote:
> "It should be 0 or a power of 2 no less than 16."
> 
> Do you want to preclude 16?
> 
> Long descriptions should be placed in `DocBrief` values.
No, I don't want to preclude 16.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72227/new/

https://reviews.llvm.org/D72227



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D72227: Add options for clang to align branches within 32B boundary

2020-01-09 Thread Kan Shengchen via Phabricator via cfe-commits
skan marked an inline comment as done and an inline comment as not done.
skan added inline comments.



Comment at: clang/lib/Driver/ToolChains/Clang.cpp:2045
+
+  if (Args.hasFlag(options::OPT_mbranches_within_32B_boundaries,
+   options::OPT_mno_branches_within_32B_boundaries, false)) {

MaskRay wrote:
> LuoYuanke wrote:
> > MaskRay wrote:
> > > skan wrote:
> > > > MaskRay wrote:
> > > > > `OPT_mbranches_within_32B_boundaries` should provide default values 
> > > > > which can be overridden by more specific options.
> > > > Currently, `-mbranches-within-32B-boundaries` is equivalent to 
> > > > `-malign-branch-boundary=32 -malign-branch=fused+jcc+jmp 
> > > > -malign-branch-prefix-size=4
> > > > 
> > > > What is expected behaviour would be very confusing if specific options 
> > > > could override `-mbranches-within-32B-boundaries`. For example, if 
> > > > passed options are
> > > > 
> > > > ```
> > > > -mbranches-within-32B-boundaries -malign-branch-boundary=32 
> > > > -mno-branches-within-32B-boundaries
> > > > ```
> > > > What should the value of `-malign-branch-boundary` be?  Is it 32 or 0?
> > > > 
> > > > If we think `-mno-branches-within-32B-boundaries` is the negative form 
> > > > of `-mbranches-within-32B-boundaries` , then `-malign-branch-boundary` 
> > > > should be 32.
> > > > 
> > > > Or if we think `-mno-branches-within-32B-boundaries` wins since it 
> > > > appears at the end, and `-mno-branches-within-32B-boundaries` means no 
> > > > need to align branches, `-malign-branch-boundary` should be 0.
> > > > 
> > > > As long as we don't support specific options could override 
> > > > `-mbranches-within-32B-boundaries`, the trouble disappears  :-)
> > > > 
> > > > 
> > > > -mbranches-within-32B-boundaries -malign-branch-boundary=32 
> > > > -mno-branches-within-32B-boundaries
> > > 
> > > My preference is that the net effect will be: `-malign-branch-boundary=32`
> > > 
> > > ```
> > > If (Args.hasFlag(options::OPT_mbranches_within_32B_boundaries, 
> > > options::OPT_mno_branches_within_32B_boundaries, false))
> > >   boundary = 32;
> > > if (const Arg *A = Args.getLastArg(options::OPT_malign_branch_EQ))
> > >   boundary = ...
> > > if (boundary)
> > >   add -mllvm boundary
> > > ```
> > > 
> > > but I'd like to hear what others say. @jyknight @reames 
> > I have no preference. What's the general rule for such case in LLVM? Is 
> > there any similar option design before? 
> I think options should follow these principles:
> 
> 1. Different options are position independent. `-mA -mB` should be the same 
> as `-mB -mA`.
> 2. `-mA` and `-mno-A` are position dependent and the last one wins. 
> Sometimes, the set may include more than 2 options, e.g. the last of 
> `-fno-pic` `-fpie` and `-fpic` wins.
> 3. More specific options can override semantics of less specific options. In 
> our case, `-malign-branch*` are more specific than 
> `-malign-branch-within-32B-boundaries`.
> 
> I have implemented these ideas in https://reviews.llvm.org/D72463. I don't 
> include documentation. Maybe documentation can be added in a different change 
> (for example, this one, if D72463 looks good to you).
> More specific options can override semantics of less specific options.

I hold a slightly different opinion about this. I think only when specific 
option appears at the right of the general option, override can happen.




CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72227/new/

https://reviews.llvm.org/D72227



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D72463: [Driver][X86] Add -malign-branch* and -malign-branch-within-32B-boundaries

2020-01-10 Thread Kan Shengchen via Phabricator via cfe-commits
skan added a comment.

In D72227  you wrote

> I think options should follow these principles:
> 
> 1. Different options are position independent. -mA -mB should be the same as 
> -mB -mA.
> 2. -mA and -mno-A are position dependent and the last one wins. Sometimes, 
> the set may include more than 2 options, e.g. the last of -fno-pic -fpie and 
> -fpic wins.
> 3. More specific options can override semantics of less specific options. In 
> our case, -malign-branch* are more specific than 
> -malign-branch-within-32B-boundaries.

This implemetation is consistent with the principles.  However, as I mentioned 
in D72227 , I hold a slightly different 
opinion about the principles.

> 1. Different options are position independent. -mA -mB should be the same as 
> -mB -mA.

I think only when A and B are not related,  (-mA -mB) == (-mB -mA).

> 2. -mA and -mno-A are position dependent and the last one wins. Sometimes, 
> the set may include more than 2 options, e.g. the last of -fno-pic -fpie and 
> -fpic wins

Totally agree.

> 3. More specific options can override semantics of less specific options. In 
> our case, -malign-branch* are more specific than 
> -malign-branch-within-32B-boundaries.

I think general options can aslo override specific options. The last one wins. 
e.g.
The net effect of `-malign-branch=fused -malign-branch-within-32B-boundaries` 
should be `-malign-branch-boundary=32 -malign-branch=fused+jcc+jmp 
-malign-branch-prefix-size=5`




Comment at: clang/lib/Driver/ToolChains/Clang.cpp:2034
+<< T << "fused, jcc, jmp, call, ret, indirect";
+AlignBranch = StringRef();
+  }

`AlignBranch = StringRef()` seems unnecessary.



Comment at: clang/lib/Driver/ToolChains/Clang.cpp:2040
+if (Value.getAsInteger(10, AlignBranchBoundary) ||
+AlignBranchBoundary < 16 || !llvm::isPowerOf2_64(AlignBranchBoundary)) 
{
+  D.Diag(diag::err_drv_invalid_argument_to_option)

Any reason for  precluding 16?



Comment at: clang/lib/Driver/ToolChains/Clang.cpp:2053
+  << Value << A->getOption().getName();
+  AlignBranch = StringRef();
+}

AlignBranch = StringRef() seems unnecessary.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72463/new/

https://reviews.llvm.org/D72463



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D72463: [Driver][X86] Add -malign-branch* and -malign-branch-within-32B-boundaries

2020-01-10 Thread Kan Shengchen via Phabricator via cfe-commits
skan added a comment.

Add revison D72225  as parent?




Comment at: clang/lib/Driver/ToolChains/Clang.cpp:2028
+if (Value.getAsInteger(10, AlignBranchBoundary) ||
+AlignBranchBoundary < 16 || !llvm::isPowerOf2_64(AlignBranchBoundary))
+  D.Diag(diag::err_drv_invalid_argument_to_option)

Any reason for precluding 16?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72463/new/

https://reviews.llvm.org/D72463



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D72463: [Driver][X86] Add -malign-branch* and -malign-branch-within-32B-boundaries

2020-01-10 Thread Kan Shengchen via Phabricator via cfe-commits
skan added inline comments.



Comment at: clang/lib/Driver/ToolChains/Clang.cpp:2040
+if (Value.getAsInteger(10, AlignBranchBoundary) ||
+AlignBranchBoundary < 16 || !llvm::isPowerOf2_64(AlignBranchBoundary)) 
{
+  D.Diag(diag::err_drv_invalid_argument_to_option)

MaskRay wrote:
> skan wrote:
> > Any reason for  precluding 16?
> I did not preclude 16.
I am sorry that I misunderstood the word "preclude".  As far as I know, we 
would like `AlignBranchBoundary>=32`


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72463/new/

https://reviews.llvm.org/D72463



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D72463: [Driver][X86] Add -malign-branch* and -malign-branch-within-32B-boundaries

2020-01-10 Thread Kan Shengchen via Phabricator via cfe-commits
skan added a comment.

In D72463#1813669 , @MaskRay wrote:

> The commutative property (independence of options) makes option composition 
> easier. clangDriver makes heavy use of `getLastArg` and `hasArg`. Without the 
> commutative property, it would now be able to shuffle code around.
>
> The `-malign-branch=jmp -mno-branches-within-32B-boundaries` issue does not 
> matter that much. I do not expect `-mno-branches-within-32B-boundaries` to be 
> used much. If we want to disable branch alignment, 
> `-malign-branch-boundary=0` can be used.


The behaviour of your proposal is "specific option is always override the 
gerneral option, no matter which is the last". I still prefer not to support 
the override, which makes things more clear. But I am fine if other reviewers 
believe this behaviour is reasonable. @jyknight  @reames @craig.topper




Comment at: clang/include/clang/Basic/DiagnosticDriverKinds.td:254
+def err_drv_invalid_malign_branch_EQ : Error<
+  "invalid argument '%0' to -malign-branch=; must be one of: %1">;
+

The error information "must be one of: " is kind of misleading.
It seems that one kind of branch can be aligned.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72463/new/

https://reviews.llvm.org/D72463



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D72463: [Driver][X86] Add -malign-branch* and -malign-branch-within-32B-boundaries

2020-01-10 Thread Kan Shengchen via Phabricator via cfe-commits
skan added inline comments.



Comment at: clang/include/clang/Basic/DiagnosticDriverKinds.td:254
+def err_drv_invalid_malign_branch_EQ : Error<
+  "invalid argument '%0' to -malign-branch=; must be one of: %1">;
+

skan wrote:
> The error information "must be one of: " is kind of misleading.
> It seems that one kind of branch can be aligned.
The error information "must be one of: " is kind of misleading.
It seems that "only" one kind of branch can be aligned.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72463/new/

https://reviews.llvm.org/D72463



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D72227: [Driver][X86] Add -malign-branch* and -malign-branch-within-32B-boundaries

2020-01-11 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 237491.
skan retitled this revision from "Add options for clang to align branches 
within 32B boundary" to "[Driver][X86] Add -malign-branch* and 
-malign-branch-within-32B-boundaries".
skan edited the summary of this revision.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72227/new/

https://reviews.llvm.org/D72227

Files:
  clang/include/clang/Basic/DiagnosticDriverKinds.td
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/test/Driver/x86-malign-branch.c
  clang/test/Driver/x86-malign-branch.s

Index: clang/test/Driver/x86-malign-branch.s
===
--- /dev/null
+++ clang/test/Driver/x86-malign-branch.s
@@ -0,0 +1,13 @@
+/// Test that -malign-branch* are handled for assembly files.
+
+// RUN: %clang -target x86_64 -malign-branch-boundary=16 %s -c -### 2>&1 | FileCheck %s --check-prefix=BOUNDARY
+// BOUNDARY: "-mllvm" "-x86-align-branch-boundary=16"
+
+// RUN: %clang -target x86_64 -malign-branch=fused,jcc,jmp %s -c -### %s 2>&1 | FileCheck %s --check-prefix=TYPE
+// TYPE: "-mllvm" "-x86-align-branch=fused+jcc+jmp"
+
+// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX
+// PREFIX: "-mllvm" "-x86-align-branch-prefix-size=5"
+
+// RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 | FileCheck %s --check-prefix=32B
+// 32B: "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" "-x86-align-branch=fused+jcc+jmp" "-mllvm" "-x86-align-branch-prefix-size=5"
Index: clang/test/Driver/x86-malign-branch.c
===
--- /dev/null
+++ clang/test/Driver/x86-malign-branch.c
@@ -0,0 +1,44 @@
+/// Test that -malign-branch* options are parsed and converted to -mllvm options.
+
+/// Test -malign-branch-boundary=
+// RUN: %clang -target x86_64 -malign-branch-boundary=16 %s -c -### 2>&1 | FileCheck %s --check-prefix=BOUNDARY
+// BOUNDARY: "-mllvm" "-x86-align-branch-boundary=16"
+
+// RUN: %clang -target x86_64 -malign-branch-boundary=8 %s -c -### 2>&1 | FileCheck %s --check-prefix=BOUNDARY-ERR
+// RUN: %clang -target x86_64 -malign-branch-boundary=15 %s -c -### 2>&1 | FileCheck %s --check-prefix=BOUNDARY-ERR
+// BOUNDARY-ERR: invalid argument {{.*}} to -malign-branch-boundary=
+
+/// Test -malign-branch=
+// RUN: %clang -target x86_64 -malign-branch=fused,jcc,jmp %s -c -### %s 2>&1 | FileCheck %s --check-prefix=TYPE0
+// TYPE0: "-mllvm" "-x86-align-branch=fused+jcc+jmp"
+// RUN: %clang -target x86_64 -malign-branch=fused,jcc,jmp,ret,call,indirect %s -c -### %s 2>&1 | FileCheck %s --check-prefix=TYPE1
+// TYPE1: "-mllvm" "-x86-align-branch=fused+jcc+jmp+ret+call+indirect"
+
+// RUN: %clang -target x86_64 -malign-branch=fused,foo,bar %s -c -### %s 2>&1 | FileCheck %s --check-prefix=TYPE-ERR
+// TYPE-ERR: invalid argument 'foo' to -malign-branch=; each element must be one of: fused, jcc, jmp, call, ret, indirect
+// TYPE-ERR: invalid argument 'bar' to -malign-branch=; each element must be one of: fused, jcc, jmp, call, ret, indirect
+
+/// Test -malign-branch-prefix-size=
+// RUN: %clang -target x86_64 -malign-branch-prefix-size=0 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX-0
+// PREFIX-0: "-mllvm" "-x86-align-branch-prefix-size=0"
+// RUN: %clang -target x86_64 -malign-branch-prefix-size=5 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX-5
+// PREFIX-5: "-mllvm" "-x86-align-branch-prefix-size=5"
+
+// RUN: %clang -target x86_64 -malign-branch-prefix-size=6 %s -c -### 2>&1 | FileCheck %s --check-prefix=PREFIX-6
+// PREFIX-6: invalid argument
+
+/// Test -mbranches-within-32B-boundaries
+// RUN: %clang -target x86_64 -mbranches-within-32B-boundaries %s -c -### 2>&1 | FileCheck %s --check-prefix=32B
+// 32B: "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" "-x86-align-branch=fused+jcc+jmp" "-mllvm" "-x86-align-branch-prefix-size=5"
+/// Test that -malign-branch* can -mbranches-within-32B-boundaries can override each other
+// RUN: %clang -target x86_64 -malign-branch=jcc -mbranches-within-32B-boundaries %s -c -### 2>&1 | FileCheck %s --check-prefix=32B-TYPE1
+// 32B-TYPE1:  "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" "-x86-align-branch=fused+jcc+jmp" "-mllvm" "-x86-align-branch-prefix-size=5"
+// RUN: %clang -target x86_64 -mbranches-within-32B-boundaries -malign-branch=jcc %s -c -### 2>&1 | FileCheck %s --check-prefix=32B-TYPE2
+// 32B-TYPE2:  "-mllvm" "-x86-align-branch-boundary=32" "-mllvm" "-x86-align-branch=jcc" "-mllvm" "-x86-align-branch-prefix-size=5"
+
+/// Unsupported on other targets.
+// RUN: %clang -target aarch64 -malign-branch=jmp %s -c -### 2>&1 | FileCheck --check-prefix=UNUSED %s
+// RUN: %clang -target aarch64 -malign-branch-boundary=7 %s -c -### 2>&1 | FileCheck --check-prefix=UNUSED %s
+// RUN: %clang -target aarch64 -malign-branch-prefix-size=15 %s -c -### 2>&1 | FileCheck --check-prefix=UNUSED %s
+// RUN: %clang -t

[PATCH] D72463: [Driver][X86] Add -malign-branch* and -malign-branch-within-32B-boundaries

2020-01-14 Thread Kan Shengchen via Phabricator via cfe-commits
skan accepted this revision.
skan added a comment.
This revision is now accepted and ready to land.

LGTM
The principle of override here is consistent with MC (D72738 
). So I think this patch is better than D72227 
.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72463/new/

https://reviews.llvm.org/D72463



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D72227: [Driver][X86] Add -malign-branch* and -malign-branch-within-32B-boundaries

2020-01-14 Thread Kan Shengchen via Phabricator via cfe-commits
skan abandoned this revision.
skan added a comment.

The override principle of driver should keep same with MC (D72738 
). D72463  is 
better, so I prefer to abandon this revision.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72227/new/

https://reviews.llvm.org/D72227



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D113096: [X86][MS-InlineAsm] Add constraint *m for memory access w/ global var

2021-11-03 Thread Kan Shengchen via Phabricator via cfe-commits
skan created this revision.
Herald added subscribers: pengfei, hiraditya.
skan requested review of this revision.
Herald added projects: clang, LLVM.
Herald added subscribers: llvm-commits, cfe-commits.

Constraint `*m` should be used when the address of a variable is passed
as a value. And the constraint is missing for MS inline assembly when sth
is written to the address of the variable.

The missing would cause FE delete the definition of the static varible,
and then result in "undefined reference to xxx" issue.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D113096

Files:
  clang/test/CodeGen/X86/ms_fmul.c
  clang/test/CodeGen/ms-inline-asm-static-variable.c
  clang/test/CodeGen/ms-inline-asm-variables.c
  llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
  llvm/test/CodeGen/X86/ms-inline-asm-array.ll

Index: llvm/test/CodeGen/X86/ms-inline-asm-array.ll
===
--- /dev/null
+++ llvm/test/CodeGen/X86/ms-inline-asm-array.ll
@@ -0,0 +1,22 @@
+; RUN: llc < %s -mcpu=x86-64  | FileCheck %s
+
+@arr = internal global [10 x i32] zeroinitializer, align 16
+
+; CHECK: movl%edx, arr(,%rdx,4)
+define dso_local i32 @main() #0 {
+entry:
+  call void asm sideeffect inteldialect "mov dword ptr $0[rdx * $$4],edx", "=*m,~{dirflag},~{fpsr},~{flags}"([10 x i32]* @arr) #1, !srcloc !4
+  ret i32 0
+}
+
+attributes #0 = { noinline nounwind optnone uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
+attributes #1 = { nounwind }
+
+!llvm.module.flags = !{!0, !1, !2}
+!llvm.ident = !{!3}
+
+!0 = !{i32 1, !"wchar_size", i32 4}
+!1 = !{i32 7, !"uwtable", i32 1}
+!2 = !{i32 7, !"frame-pointer", i32 2}
+!3 = !{!"clang"}
+!4 = !{i64 63}
Index: llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
===
--- llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
+++ llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
@@ -1759,7 +1759,7 @@
   // registers in a mmory expression, and though unaccessible via rip/eip.
   if (IsGlobalLV && (BaseReg || IndexReg)) {
 Operands.push_back(
-X86Operand::CreateMem(getPointerWidth(), Disp, Start, End, Size));
+X86Operand::CreateMem(getPointerWidth(), Disp, Start, End, Size, Identifier, Decl));
 return false;
   }
   // Otherwise, we set the base register to a non-zero value
@@ -2551,6 +2551,8 @@
   StringRef ErrMsg;
   unsigned BaseReg = SM.getBaseReg();
   unsigned IndexReg = SM.getIndexReg();
+  if (IndexReg && BaseReg == X86::RIP)
+BaseReg = 0;
   unsigned Scale = SM.getScale();
   if (!PtrInOperand)
 Size = SM.getElementSize() << 3;
Index: clang/test/CodeGen/ms-inline-asm-variables.c
===
--- clang/test/CodeGen/ms-inline-asm-variables.c
+++ clang/test/CodeGen/ms-inline-asm-variables.c
@@ -3,19 +3,19 @@
 
 int gVar;
 void t1() {
-  // CHECK: add eax, dword ptr gVar[eax]
+  // CHECK: add eax, dword ptr ${{[0-9]}}[eax]
   __asm add eax, dword ptr gVar[eax]
-  // CHECK: add dword ptr gVar[eax], eax
+  // CHECK: add dword ptr ${{[0-9]}}[eax], eax
   __asm add dword ptr [eax+gVar], eax
-  // CHECK: add ebx, dword ptr gVar[ebx + $$270]
+  // CHECK: add ebx, dword ptr ${{[0-9]}}[ebx + $$270]
   __asm add ebx, dword ptr gVar[271 - 82 + 81 + ebx]
-  // CHECK: add dword ptr gVar[ebx + $$828], ebx
+  // CHECK: add dword ptr ${{[0-9]}}[ebx + $$828], ebx
   __asm add dword ptr [ebx + gVar + 828], ebx
-  // CHECK: add ecx, dword ptr gVar[ecx + ecx * $$4 + $$4590]
+  // CHECK: add ecx, dword ptr ${{[0-9]}}[ecx + ecx * $$4 + $$4590]
   __asm add ecx, dword ptr gVar[4590 + ecx + ecx*4]
-  // CHECK: add dword ptr gVar[ecx + ecx * $$8 + $$73], ecx
+  // CHECK: add dword ptr ${{[0-9]}}[ecx + ecx * $$8 + $$73], ecx
   __asm add dword ptr [gVar + ecx + 45 + 23 - 53 + 60 - 2 + ecx*8], ecx
-  // CHECK: add gVar[ecx + ebx + $$7], eax
+  // CHECK: add ${{[0-9]}}[ecx + ebx + $$7], eax
   __asm add 1 + 1 + 2 + 3[gVar + ecx + ebx], eax
 }
 
@@ -32,4 +32,3 @@
   // CHECK: mov ${{[0-9]}}[ebx + $$47], eax
   __asm mov 5 + 8 + 13 + 21[lVar + ebx], eax
 }
-
Index: clang/test/CodeGen/ms-inline-asm-static-variable.c
===
--- /dev/null
+++ clang/test/CodeGen/ms-inline-asm-static-variable.c
@@ -0,0 +1,10 @@
+// REQUIRES: x86-registered-target
+// Check the constraint "*m" of operand arr and the definition of arr is not removed by FE
+// RUN: %clang_cc1 %s -fasm-blocks -triple i386-apple-darwin10 -emit-llvm -o - | FileCheck %s
+
+static int arr[10];
+void t1() {
+  // CHECK: @arr = internal global [10 x i32]
+  // CHECK: call void asm sideeffect inteldialect "mov dword ptr $0[edx * $$4],edx", "=*m,{{.*}}([10 x i32]* @arr)
+  __asm mov  dword ptr arr[edx*4],edx
+}
Index: clang/test/CodeGen/X86/ms_

[PATCH] D113096: [X86][MS-InlineAsm] Add constraint *m for memory access w/ global var

2021-11-03 Thread Kan Shengchen via Phabricator via cfe-commits
skan updated this revision to Diff 384401.
skan added a comment.

clang-format the diff


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D113096/new/

https://reviews.llvm.org/D113096

Files:
  clang/test/CodeGen/X86/ms_fmul.c
  clang/test/CodeGen/ms-inline-asm-static-variable.c
  clang/test/CodeGen/ms-inline-asm-variables.c
  llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
  llvm/test/CodeGen/X86/ms-inline-asm-array.ll

Index: llvm/test/CodeGen/X86/ms-inline-asm-array.ll
===
--- /dev/null
+++ llvm/test/CodeGen/X86/ms-inline-asm-array.ll
@@ -0,0 +1,22 @@
+; RUN: llc < %s -mcpu=x86-64  | FileCheck %s
+
+@arr = internal global [10 x i32] zeroinitializer, align 16
+
+; CHECK: movl%edx, arr(,%rdx,4)
+define dso_local i32 @main() #0 {
+entry:
+  call void asm sideeffect inteldialect "mov dword ptr $0[rdx * $$4],edx", "=*m,~{dirflag},~{fpsr},~{flags}"([10 x i32]* @arr) #1, !srcloc !4
+  ret i32 0
+}
+
+attributes #0 = { noinline nounwind optnone uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
+attributes #1 = { nounwind }
+
+!llvm.module.flags = !{!0, !1, !2}
+!llvm.ident = !{!3}
+
+!0 = !{i32 1, !"wchar_size", i32 4}
+!1 = !{i32 7, !"uwtable", i32 1}
+!2 = !{i32 7, !"frame-pointer", i32 2}
+!3 = !{!"clang"}
+!4 = !{i64 63}
Index: llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
===
--- llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
+++ llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
@@ -1758,8 +1758,8 @@
   // It is widely common for MS InlineAsm to use a global variable and one/two
   // registers in a mmory expression, and though unaccessible via rip/eip.
   if (IsGlobalLV && (BaseReg || IndexReg)) {
-Operands.push_back(
-X86Operand::CreateMem(getPointerWidth(), Disp, Start, End, Size));
+Operands.push_back(X86Operand::CreateMem(getPointerWidth(), Disp, Start,
+ End, Size, Identifier, Decl));
 return false;
   }
   // Otherwise, we set the base register to a non-zero value
@@ -2551,6 +2551,8 @@
   StringRef ErrMsg;
   unsigned BaseReg = SM.getBaseReg();
   unsigned IndexReg = SM.getIndexReg();
+  if (IndexReg && BaseReg == X86::RIP)
+BaseReg = 0;
   unsigned Scale = SM.getScale();
   if (!PtrInOperand)
 Size = SM.getElementSize() << 3;
Index: clang/test/CodeGen/ms-inline-asm-variables.c
===
--- clang/test/CodeGen/ms-inline-asm-variables.c
+++ clang/test/CodeGen/ms-inline-asm-variables.c
@@ -3,19 +3,19 @@
 
 int gVar;
 void t1() {
-  // CHECK: add eax, dword ptr gVar[eax]
+  // CHECK: add eax, dword ptr ${{[0-9]}}[eax]
   __asm add eax, dword ptr gVar[eax]
-  // CHECK: add dword ptr gVar[eax], eax
+  // CHECK: add dword ptr ${{[0-9]}}[eax], eax
   __asm add dword ptr [eax+gVar], eax
-  // CHECK: add ebx, dword ptr gVar[ebx + $$270]
+  // CHECK: add ebx, dword ptr ${{[0-9]}}[ebx + $$270]
   __asm add ebx, dword ptr gVar[271 - 82 + 81 + ebx]
-  // CHECK: add dword ptr gVar[ebx + $$828], ebx
+  // CHECK: add dword ptr ${{[0-9]}}[ebx + $$828], ebx
   __asm add dword ptr [ebx + gVar + 828], ebx
-  // CHECK: add ecx, dword ptr gVar[ecx + ecx * $$4 + $$4590]
+  // CHECK: add ecx, dword ptr ${{[0-9]}}[ecx + ecx * $$4 + $$4590]
   __asm add ecx, dword ptr gVar[4590 + ecx + ecx*4]
-  // CHECK: add dword ptr gVar[ecx + ecx * $$8 + $$73], ecx
+  // CHECK: add dword ptr ${{[0-9]}}[ecx + ecx * $$8 + $$73], ecx
   __asm add dword ptr [gVar + ecx + 45 + 23 - 53 + 60 - 2 + ecx*8], ecx
-  // CHECK: add gVar[ecx + ebx + $$7], eax
+  // CHECK: add ${{[0-9]}}[ecx + ebx + $$7], eax
   __asm add 1 + 1 + 2 + 3[gVar + ecx + ebx], eax
 }
 
@@ -32,4 +32,3 @@
   // CHECK: mov ${{[0-9]}}[ebx + $$47], eax
   __asm mov 5 + 8 + 13 + 21[lVar + ebx], eax
 }
-
Index: clang/test/CodeGen/ms-inline-asm-static-variable.c
===
--- /dev/null
+++ clang/test/CodeGen/ms-inline-asm-static-variable.c
@@ -0,0 +1,10 @@
+// REQUIRES: x86-registered-target
+// Check the constraint "*m" of operand arr and the definition of arr is not removed by FE
+// RUN: %clang_cc1 %s -fasm-blocks -triple i386-apple-darwin10 -emit-llvm -o - | FileCheck %s
+
+static int arr[10];
+void t1() {
+  // CHECK: @arr = internal global [10 x i32]
+  // CHECK: call void asm sideeffect inteldialect "mov dword ptr $0[edx * $$4],edx", "=*m,{{.*}}([10 x i32]* @arr)
+  __asm mov  dword ptr arr[edx*4],edx
+}
Index: clang/test/CodeGen/X86/ms_fmul.c
===
--- clang/test/CodeGen/X86/ms_fmul.c
+++ clang/test/CodeGen/X86/ms_fmul.c
@@ -18,4 +18,4 @@
 }}
 
 // CHECK-LABEL: foo
-// CHECK: call void asm sideef

[PATCH] D113096: [X86][MS-InlineAsm] Add constraint *m for memory access w/ global var

2021-11-03 Thread Kan Shengchen via Phabricator via cfe-commits
skan marked 3 inline comments as done.
skan added inline comments.



Comment at: clang/test/CodeGen/ms-inline-asm-static-variable.c:8
+  // CHECK: @arr = internal global [10 x i32]
+  // CHECK: call void asm sideeffect inteldialect "mov dword ptr $0[edx * 
$$4],edx", "=*m,{{.*}}([10 x i32]* @arr)
+  __asm mov  dword ptr arr[edx*4],edx

pengfei wrote:
> IIRC, we have limitation on the number. Can you check if it works when we 
> have more than 10 global variables.
sorry, which number?



Comment at: clang/test/CodeGen/ms-inline-asm-variables.c:35
 }
-

pengfei wrote:
> Unrelated change.
Just delete a blank line, which is done by auto clang-format. I think it's okay.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D113096/new/

https://reviews.llvm.org/D113096

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D113096: [X86][MS-InlineAsm] Add constraint *m for memory access w/ global var

2021-11-03 Thread Kan Shengchen via Phabricator via cfe-commits
skan marked 2 inline comments as done.
skan added inline comments.



Comment at: llvm/test/CodeGen/X86/ms-inline-asm-array.ll:15-22
+!llvm.module.flags = !{!0, !1, !2}
+!llvm.ident = !{!3}
+
+!0 = !{i32 1, !"wchar_size", i32 4}
+!1 = !{i32 7, !"uwtable", i32 1}
+!2 = !{i32 7, !"frame-pointer", i32 2}
+!3 = !{!"clang"}

pengfei wrote:
> These seem unnecessary.
This is necessary b/c we need to check the inline-asm IR can be rerwritten to 
correct assmbly after constraint "*m" is added.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D113096/new/

https://reviews.llvm.org/D113096

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D113096: [X86][MS-InlineAsm] Add constraint *m for memory access w/ global var

2021-11-03 Thread Kan Shengchen via Phabricator via cfe-commits
skan marked 3 inline comments as done.
skan added inline comments.



Comment at: clang/test/CodeGen/ms-inline-asm-static-variable.c:8
+  // CHECK: @arr = internal global [10 x i32]
+  // CHECK: call void asm sideeffect inteldialect "mov dword ptr $0[edx * 
$$4],edx", "=*m,{{.*}}([10 x i32]* @arr)
+  __asm mov  dword ptr arr[edx*4],edx

pengfei wrote:
> skan wrote:
> > pengfei wrote:
> > > IIRC, we have limitation on the number. Can you check if it works when we 
> > > have more than 10 global variables.
> > sorry, which number?
> `$0`. I mean if we have arr1, arr2, ..., we should have `$1`, `$2`, ... but 
> the max number is `$9` if I remember it correctly.
We does not touch that part of the code. If there was this limitation before, 
there is now.



Comment at: llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp:1759
   // It is widely common for MS InlineAsm to use a global variable and one/two
   // registers in a mmory expression, and though unaccessible via rip/eip.
   if (IsGlobalLV && (BaseReg || IndexReg)) {

xiangzhangllvm wrote:
> Let me generally tell out my understand here, (If wrong PLS correct me)
> Here from the comments we can see, the old code want to keep the origin 
> symbol of global variable to let linker (relocation) handle it.  Here you 
> describe it with a  pointer (with decl), it change to form of $ID <--> 
> (decl), So which need constrain it with "*m". But if the pointer can not be 
> access from BaseReg(Rip) + Index(Ip) how do you descript the pointer you 
> generate out ?
> 
I think you may misunderstand this code.

This code handles the memory that can not be represented by Disp(RIP) b/c there 
is already a BaseReg or IndexReg there.

Before this patch, the memory is represented like `arr[edx*4]` and there is no 
identifer bound to it.  And after this patch, we bind the memory to identifer 
arr.



Comment at: llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp:2554-2555
   unsigned IndexReg = SM.getIndexReg();
+  if (IndexReg && BaseReg == X86::RIP)
+BaseReg = 0;
   unsigned Scale = SM.getScale();

xiangzhangllvm wrote:
> The change here looks too arbitrary. For global address it is ok to drop the 
> base, it mainly fetch from offset. but if here not global variable?
RIP and IndexReg can never be used together according to design of X86 
instruction. The BaseReg is set to RIP b/c we add the constaint "*m" in the 
MS-inline assembly. So we can drop it safely.

I acknowledge it's not the best way to do it, but it's simplest. Similary, you 
can see the line 2560-2562.  RSP can never be a IndexReg, but we just swap the 
BaseReg w/ IndexReg b/c it is not handled well in previous phases.



Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D113096/new/

https://reviews.llvm.org/D113096

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D113096: [X86][MS-InlineAsm] Add constraint *m for memory access w/ global var

2021-11-04 Thread Kan Shengchen via Phabricator via cfe-commits
skan marked 3 inline comments as done.
skan added inline comments.



Comment at: llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp:1759
   // It is widely common for MS InlineAsm to use a global variable and one/two
   // registers in a mmory expression, and though unaccessible via rip/eip.
   if (IsGlobalLV && (BaseReg || IndexReg)) {

xiangzhangllvm wrote:
> skan wrote:
> > xiangzhangllvm wrote:
> > > Let me generally tell out my understand here, (If wrong PLS correct me)
> > > Here from the comments we can see, the old code want to keep the origin 
> > > symbol of global variable to let linker (relocation) handle it.  Here you 
> > > describe it with a  pointer (with decl), it change to form of $ID <--> 
> > > (decl), So which need constrain it with "*m". But if the pointer can not 
> > > be access from BaseReg(Rip) + Index(Ip) how do you descript the pointer 
> > > you generate out ?
> > > 
> > I think you may misunderstand this code.
> > 
> > This code handles the memory that can not be represented by Disp(RIP) b/c 
> > there is already a BaseReg or IndexReg there.
> > 
> > Before this patch, the memory is represented like `arr[edx*4]` and there is 
> > no identifer bound to it.  And after this patch, we bind the memory to 
> > identifer arr.
> Yes, that is why I mean t change ( arr[edx*4] ) to form of $ID <--> (decl). 
> So what the problem if we let the old form ( arr[edx*4] ) being ?
Then the definition of arr would be deleted by C Front end, and result in 
"undefined reference to xxx" issue during link stage.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D113096/new/

https://reviews.llvm.org/D113096

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D113096: [X86][MS-InlineAsm] Add constraint *m for memory access w/ global var

2021-11-04 Thread Kan Shengchen via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rGbe08e452f366: [X86][MS-InlineAsm] Add constraint *m for 
memory access w/ global var (authored by skan).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D113096/new/

https://reviews.llvm.org/D113096

Files:
  clang/test/CodeGen/X86/ms_fmul.c
  clang/test/CodeGen/ms-inline-asm-static-variable.c
  clang/test/CodeGen/ms-inline-asm-variables.c
  llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
  llvm/test/CodeGen/X86/ms-inline-asm-array.ll

Index: llvm/test/CodeGen/X86/ms-inline-asm-array.ll
===
--- /dev/null
+++ llvm/test/CodeGen/X86/ms-inline-asm-array.ll
@@ -0,0 +1,22 @@
+; RUN: llc < %s -mcpu=x86-64  | FileCheck %s
+
+@arr = internal global [10 x i32] zeroinitializer, align 16
+
+; CHECK: movl%edx, arr(,%rdx,4)
+define dso_local i32 @main() #0 {
+entry:
+  call void asm sideeffect inteldialect "mov dword ptr $0[rdx * $$4],edx", "=*m,~{dirflag},~{fpsr},~{flags}"([10 x i32]* @arr) #1, !srcloc !4
+  ret i32 0
+}
+
+attributes #0 = { noinline nounwind optnone uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
+attributes #1 = { nounwind }
+
+!llvm.module.flags = !{!0, !1, !2}
+!llvm.ident = !{!3}
+
+!0 = !{i32 1, !"wchar_size", i32 4}
+!1 = !{i32 7, !"uwtable", i32 1}
+!2 = !{i32 7, !"frame-pointer", i32 2}
+!3 = !{!"clang"}
+!4 = !{i64 63}
Index: llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
===
--- llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
+++ llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
@@ -1758,8 +1758,8 @@
   // It is widely common for MS InlineAsm to use a global variable and one/two
   // registers in a mmory expression, and though unaccessible via rip/eip.
   if (IsGlobalLV && (BaseReg || IndexReg)) {
-Operands.push_back(
-X86Operand::CreateMem(getPointerWidth(), Disp, Start, End, Size));
+Operands.push_back(X86Operand::CreateMem(getPointerWidth(), Disp, Start,
+ End, Size, Identifier, Decl));
 return false;
   }
   // Otherwise, we set the base register to a non-zero value
@@ -2551,6 +2551,8 @@
   StringRef ErrMsg;
   unsigned BaseReg = SM.getBaseReg();
   unsigned IndexReg = SM.getIndexReg();
+  if (IndexReg && BaseReg == X86::RIP)
+BaseReg = 0;
   unsigned Scale = SM.getScale();
   if (!PtrInOperand)
 Size = SM.getElementSize() << 3;
Index: clang/test/CodeGen/ms-inline-asm-variables.c
===
--- clang/test/CodeGen/ms-inline-asm-variables.c
+++ clang/test/CodeGen/ms-inline-asm-variables.c
@@ -3,19 +3,19 @@
 
 int gVar;
 void t1() {
-  // CHECK: add eax, dword ptr gVar[eax]
+  // CHECK: add eax, dword ptr ${{[0-9]}}[eax]
   __asm add eax, dword ptr gVar[eax]
-  // CHECK: add dword ptr gVar[eax], eax
+  // CHECK: add dword ptr ${{[0-9]}}[eax], eax
   __asm add dword ptr [eax+gVar], eax
-  // CHECK: add ebx, dword ptr gVar[ebx + $$270]
+  // CHECK: add ebx, dword ptr ${{[0-9]}}[ebx + $$270]
   __asm add ebx, dword ptr gVar[271 - 82 + 81 + ebx]
-  // CHECK: add dword ptr gVar[ebx + $$828], ebx
+  // CHECK: add dword ptr ${{[0-9]}}[ebx + $$828], ebx
   __asm add dword ptr [ebx + gVar + 828], ebx
-  // CHECK: add ecx, dword ptr gVar[ecx + ecx * $$4 + $$4590]
+  // CHECK: add ecx, dword ptr ${{[0-9]}}[ecx + ecx * $$4 + $$4590]
   __asm add ecx, dword ptr gVar[4590 + ecx + ecx*4]
-  // CHECK: add dword ptr gVar[ecx + ecx * $$8 + $$73], ecx
+  // CHECK: add dword ptr ${{[0-9]}}[ecx + ecx * $$8 + $$73], ecx
   __asm add dword ptr [gVar + ecx + 45 + 23 - 53 + 60 - 2 + ecx*8], ecx
-  // CHECK: add gVar[ecx + ebx + $$7], eax
+  // CHECK: add ${{[0-9]}}[ecx + ebx + $$7], eax
   __asm add 1 + 1 + 2 + 3[gVar + ecx + ebx], eax
 }
 
@@ -32,4 +32,3 @@
   // CHECK: mov ${{[0-9]}}[ebx + $$47], eax
   __asm mov 5 + 8 + 13 + 21[lVar + ebx], eax
 }
-
Index: clang/test/CodeGen/ms-inline-asm-static-variable.c
===
--- /dev/null
+++ clang/test/CodeGen/ms-inline-asm-static-variable.c
@@ -0,0 +1,10 @@
+// REQUIRES: x86-registered-target
+// Check the constraint "*m" of operand arr and the definition of arr is not removed by FE
+// RUN: %clang_cc1 %s -fasm-blocks -triple i386-apple-darwin10 -emit-llvm -o - | FileCheck %s
+
+static int arr[10];
+void t1() {
+  // CHECK: @arr = internal global [10 x i32]
+  // CHECK: call void asm sideeffect inteldialect "mov dword ptr $0[edx * $$4],edx", "=*m,{{.*}}([10 x i32]* @arr)
+  __asm mov  dword ptr arr[edx*4],edx
+}
Index: clang/test/CodeGen/X86/ms_fmul.c
===
--- clang/test/CodeGen/X86/ms_fmul.c
+++ 

[PATCH] D113096: [X86][MS-InlineAsm] Add constraint *m for memory access w/ global var

2021-11-04 Thread Kan Shengchen via Phabricator via cfe-commits
skan added a comment.

In D113096#3110507 , @thakis wrote:

> Looks like this breaks tests on Mac: http://45.33.8.238/mac/38266/step_11.txt
>
> Please take a look and revert for now if it takes a while to fix.

I can quickly fix it.

It's the issue of ambiguous triple.  You are using the 
`-mtriple=x86_64-apple-mac*` while I am using 
`-mtriple=x86_64-unknown-linux-gnu`


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D113096/new/

https://reviews.llvm.org/D113096

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D113096: [X86][MS-InlineAsm] Add constraint *m for memory access w/ global var

2021-11-04 Thread Kan Shengchen via Phabricator via cfe-commits
skan added a comment.

In D113096#3110546 , @skan wrote:

> In D113096#3110507 , @thakis wrote:
>
>> Looks like this breaks tests on Mac: http://45.33.8.238/mac/38266/step_11.txt
>>
>> Please take a look and revert for now if it takes a while to fix.
>
> I can quickly fix it.
>
> It's the issue of ambiguous triple.  You are using the 
> `-mtriple=x86_64-apple-mac*` while I am using 
> `-mtriple=x86_64-unknown-linux-gnu`

Fixed by 6d03227c16ee 



Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D113096/new/

https://reviews.llvm.org/D113096

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D135937: [X86] Support -march=raptorlake, meteorlake

2022-10-20 Thread Kan Shengchen via Phabricator via cfe-commits
skan added inline comments.



Comment at: compiler-rt/lib/builtins/cpu_model.c:110
   INTEL_COREI7_ROCKETLAKE,
+  ZHAOXIN_FAM7H_LUJIAZUI,
+  INTEL_COREI7_RAPTORLAKE,

typo ? (ZHAOXIN_FAM7H_LUJIAZUI)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135937/new/

https://reviews.llvm.org/D135937

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D135933: [X86] Add CMPCCXADD instructions.

2022-10-21 Thread Kan Shengchen via Phabricator via cfe-commits
skan added inline comments.



Comment at: llvm/lib/Target/X86/X86ISelLowering.cpp:28251
+  SDLoc DL(Op);
+  SDVTList VTs = DAG.getVTList(MVT::i32, MVT::Other);
+  SDValue Chain = Op.getOperand(0);

Unused?



Comment at: llvm/lib/Target/X86/X86InstrInfo.td:3024
+//
+let Predicates = [HasCMPCCXADD, In64BitMode], Defs = [EFLAGS],
+Constraints = "$dstsrc2 = $dst" in {

Should we set isCodeGenOnly =1 here?



Comment at: llvm/utils/TableGen/X86RecognizableInstr.h:109
 PrefixByte= 10,
+MRMDestMem4VOp3CC = 18,
 MRMr0  = 21,

Should we use 20 here?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135933/new/

https://reviews.llvm.org/D135933

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D135933: [X86] Add CMPCCXADD instructions.

2022-10-21 Thread Kan Shengchen via Phabricator via cfe-commits
skan added inline comments.



Comment at: llvm/lib/Target/X86/X86InstrInfo.td:3028
+  (ins i32mem:$dstsrc1, GR32:$dstsrc2, GR32:$src3, ccode:$cond),
+  "cmp${cond}xadd\t{$src3, $dst, $dstsrc1|$dstsrc1, $dst, $src3}",
+  [(set GR32:$dst, (X86cmpccxadd addr:$dstsrc1, GR32:$dstsrc2, 
GR32:$src3, timm:$cond))]>,

+1 for craig. Usually if the input is tied to ouput, it should be the 1st 
input. These two instructions use a new Format MRMDestMem4VOp3CC rather than an 
existing one, I belive it won't increase the complexity.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135933/new/

https://reviews.llvm.org/D135933

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D135937: [WIP][X86] Support -march=raptorlake, meteorlake

2022-10-21 Thread Kan Shengchen via Phabricator via cfe-commits
skan added inline comments.



Comment at: compiler-rt/lib/builtins/cpu_model.c:111
+  ZHAOXIN_FAM7H_LUJIAZUI,
+  INTEL_COREI7_RAPTORLAKE,
+  INTEL_COREI7_METEORLAKE,

I see. But if possible, could we split "ZHAOXIN_FAM7H_LUJIAZUI" to another 
patch?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135937/new/

https://reviews.llvm.org/D135937

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D135932: [X86] Add AVX-IFMA instructions.

2022-10-21 Thread Kan Shengchen via Phabricator via cfe-commits
skan added inline comments.



Comment at: clang/lib/Basic/Targets/X86.cpp:781
+Builder.defineMacro("__AVXIFMA__");
+  Builder.defineMacro("__AVXIFMA_SUPPORTED__");
   if (HasAVXVNNI)

Why do we need this line?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135932/new/

https://reviews.llvm.org/D135932

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D135933: [X86] Add CMPCCXADD instructions.

2022-10-23 Thread Kan Shengchen via Phabricator via cfe-commits
skan added inline comments.



Comment at: llvm/lib/Target/X86/X86InstrInfo.td:3035
+  "cmp${cond}xadd\t{$src3, $dst, $dstsrc1|$dstsrc1, $dst, $src3}",
+  [(set GR64:$dst, (X86cmpccxadd addr:$dstsrc1, GR64:$dstsrc2, 
GR64:$src3, timm:$cond))]>,
+  VEX_4V, VEX_W, T8PD, Sched<[WriteXCHG]>;

`set GR64:$dst, EFLAGS ...`?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135933/new/

https://reviews.llvm.org/D135933

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D135933: [X86] Add CMPCCXADD instructions.

2022-10-23 Thread Kan Shengchen via Phabricator via cfe-commits
skan added inline comments.



Comment at: clang/lib/Headers/cmpccxaddintrin.h:19-34
+  _CMPCCX_O,   /* Overflow.  */
+  _CMPCCX_NO,  /* No overflow.  */
+  _CMPCCX_B,   /* Below.  */
+  _CMPCCX_NB,  /* Not below.  */
+  _CMPCCX_Z,   /* Zero.  */
+  _CMPCCX_NZ,  /* Not zero.  */
+  _CMPCCX_BE,  /* Below or equal.  */

Could you use the same suffix for the condition code as 
`./llvm/lib/Target/X86/MCTargetDesc/X86BaseInfo.h`? e.g
```
NB->AE
Z->E
NZ->NE
NBE->A
```
and so on.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135933/new/

https://reviews.llvm.org/D135933

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D135938: [X86] Add AVX-VNNI-INT8 instructions.

2022-10-23 Thread Kan Shengchen via Phabricator via cfe-commits
skan added inline comments.



Comment at: llvm/include/llvm/Support/X86TargetParser.def:205
 X86_FEATURE   (AVX512FP16,  "avx512fp16")
+X86_FEATURE   (AVXVNNIINT8, "avxvnniint8")
 X86_FEATURE   (AVXVNNI, "avxvnni")

Move it after AVXVNNI to keep the dictionary order?



Comment at: llvm/lib/Target/X86/X86InstrSSE.td:8127-8131
+multiclass avx_dotprod_rm opc, string OpcodeStr, ValueType OpVT,
+  RegisterClass RC, PatFrag MemOpFrag,
+  X86MemOperand x86memop, SDNode OpNode,
+  X86FoldableSchedWrite sched,
+  bit IsCommutable> {

Could you unify the name converntion? e.g Captialize the first character for 
all parameters for this multiclass.



Comment at: llvm/test/CodeGen/X86/stack-folding-int-avxvnniint8.ll:4-5
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-unknown"
+

Could we remove these two lines?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135938/new/

https://reviews.llvm.org/D135938

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D135933: [X86] Add CMPCCXADD instructions.

2022-10-24 Thread Kan Shengchen via Phabricator via cfe-commits
skan added inline comments.



Comment at: llvm/lib/Target/X86/MCTargetDesc/X86InstPrinterCommon.cpp:32
   int64_t Imm = MI->getOperand(Op).getImm();
+  bool flavor = MI->getOpcode() == X86::CMPCCXADDmr32 || X86::CMPCCXADDmr64;
   switch (Imm) {

Capitalize 1st char



Comment at: llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp:1453-1455
+emitMemModRMByte(MI, CurOp + 1, getX86RegNum(MI.getOperand(0)), TSFlags,
+ HasREX, StartByte, OS, Fixups, STI, false);
+CurOp = SrcRegNum + 3; // skip VEX_V4 and CC

Minor suggestion

```
emitMemModRMByte(MI, ++CurOp, getX86RegNum(MI.getOperand(0)), TSFlags,
 HasREX, StartByte, OS, Fixups, STI, false);
CurOp = SrcRegNum + 2; // skip VEX_V4 and CC
```
would be more clear b/c you use "skip VEX_V4 and CC" in the comments.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135933/new/

https://reviews.llvm.org/D135933

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D135933: [X86] Add CMPCCXADD instructions.

2022-10-24 Thread Kan Shengchen via Phabricator via cfe-commits
skan added inline comments.



Comment at: llvm/lib/Target/X86/X86InstrInfo.td:3027
+def CMPCCXADDmr32 : I<0xe0, MRMDestMem4VOp3CC, (outs GR32:$dst),
+  (ins GR32:$dstsrc2, i32mem:$dstsrc1, GR32:$src3, ccode:$cond),
+  "cmp${cond}xadd\t{$src3, $dst, $dstsrc1|$dstsrc1, $dst, $src3}",

Could you use "GR32:$dstsrc1, i32mem:$dstsrc2" instead?



Comment at: llvm/lib/Target/X86/X86InstrInfo.td:3024
+//
+let Predicates = [HasCMPCCXADD, In64BitMode], Defs = [EFLAGS],
+Constraints = "$dstsrc2 = $dst" in {

pengfei wrote:
> skan wrote:
> > Should we set isCodeGenOnly =1 here?
> Should also set `mayLoad` and `mayStore`?
Yeah, I think so.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135933/new/

https://reviews.llvm.org/D135933

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D135933: [X86] Add CMPCCXADD instructions.

2022-10-24 Thread Kan Shengchen via Phabricator via cfe-commits
skan accepted this revision.
skan added a comment.

LGTM


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135933/new/

https://reviews.llvm.org/D135933

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D135932: [X86] Add AVX-IFMA instructions.

2022-10-27 Thread Kan Shengchen via Phabricator via cfe-commits
skan accepted this revision.
skan added a comment.

LGTM


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135932/new/

https://reviews.llvm.org/D135932

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D135938: [X86] Add AVX-VNNI-INT8 instructions.

2022-10-27 Thread Kan Shengchen via Phabricator via cfe-commits
skan accepted this revision.
skan added a comment.

LGTM


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135938/new/

https://reviews.llvm.org/D135938

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D140531: [X86] Add reduce_*_ep[i|u]8/16 series intrinsics.

2022-12-22 Thread Kan Shengchen via Phabricator via cfe-commits
skan added inline comments.



Comment at: clang/docs/ReleaseNotes.rst:806
 - Lift _BitInt() supported max width from 128 to 8388608.
+- Support *_reduce_*_ep[i|u]8/16 series intrinsics.
 

This is not clear to me, try sth like "mm*_reduce_(add|and|max)_epi" and put 
the name in a code-block like the previous lines.



Comment at: clang/test/CodeGen/X86/avx512vlbw-reduceIntrin.c:1
+// RUN: %clang_cc1 -ffreestanding %s -O0 -triple=x86_64-apple-darwin 
-target-feature +avx512bw -target-feature +avx512vl -emit-llvm -o - -Wall 
-Werror | FileCheck %s
+

drop "-apple-darwin"?



Comment at: clang/test/CodeGen/X86/avx512vlbw-reduceIntrin.c:115
+
+char test_mm_reduce_mul_epi8(__m128i __W){
+// CHECK-LABEL: @test_mm_reduce_mul_epi8(

char has different meaning on different platforms. Should we use "signed char" 
or "unsigned char" explicitly?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D140531/new/

https://reviews.llvm.org/D140531

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D140531: [X86] Add reduce_*_ep[i|u]8/16 series intrinsics.

2022-12-22 Thread Kan Shengchen via Phabricator via cfe-commits
skan added inline comments.



Comment at: clang/lib/Headers/avx512vlbwintrin.h:2997
+
+static __inline__ char __DEFAULT_FN_ATTRS128
+_mm_reduce_or_epi8(__m128i __W) {

Should we update here too?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D140531/new/

https://reviews.llvm.org/D140531

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D140531: [X86] Add reduce_*_ep[i|u]8/16 series intrinsics.

2022-12-22 Thread Kan Shengchen via Phabricator via cfe-commits
skan added inline comments.



Comment at: clang/test/CodeGen/X86/avx512vlbw-reduceIntrin.c:115
+
+char test_mm_reduce_mul_epi8(__m128i __W){
+// CHECK-LABEL: @test_mm_reduce_mul_epi8(

skan wrote:
> char has different meaning on different platforms. Should we use "signed 
> char" or "unsigned char" explicitly?
> char has different meaning on different platforms. Should we use "signed 
> char" or "unsigned char" explicitly?

Sorry, I think you misuderstood. It's a question, not a request. I already saw 

```
_mm_mask_set1_epi8 (__m128i __O, __mmask16 __M, char __A)
_mm_maskz_set1_epi8 (__mmask16 __M, char __A)
_mm256_mask_set1_epi8 (__m256i __O, __mmask32 __M, char __A)
_mm256_maskz_set1_epi8 (__mmask32 __M, char __A)
```

in this file, but I am not if using "char" is appropriate.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D140531/new/

https://reviews.llvm.org/D140531

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D140531: [X86] Add reduce_*_ep[i|u]8/16 series intrinsics.

2022-12-22 Thread Kan Shengchen via Phabricator via cfe-commits
skan accepted this revision.
skan added inline comments.



Comment at: clang/test/CodeGen/X86/avx512vlbw-reduceIntrin.c:115
+
+char test_mm_reduce_mul_epi8(__m128i __W){
+// CHECK-LABEL: @test_mm_reduce_mul_epi8(

FreddyYe wrote:
> skan wrote:
> > skan wrote:
> > > char has different meaning on different platforms. Should we use "signed 
> > > char" or "unsigned char" explicitly?
> > > char has different meaning on different platforms. Should we use "signed 
> > > char" or "unsigned char" explicitly?
> > 
> > Sorry, I think you misuderstood. It's a question, not a request. I already 
> > saw 
> > 
> > ```
> > _mm_mask_set1_epi8 (__m128i __O, __mmask16 __M, char __A)
> > _mm_maskz_set1_epi8 (__mmask16 __M, char __A)
> > _mm256_mask_set1_epi8 (__m256i __O, __mmask32 __M, char __A)
> > _mm256_maskz_set1_epi8 (__mmask32 __M, char __A)
> > ```
> > 
> > in this file, but I am not if using "char" is appropriate.
> After investigating, I think we should use `signed char` and `_v\d+qs` 
> instead of `_v\d+qi` for new intrinsic here for 2 reasons:
> 1) _epi8 means `signed i8` here.
> 2) implement is using LLVM builtins but not x86 builtins.
> 
> And intrinsics not fitting two conditions above don't need to use explictly 
> `signed char`.
Make sense


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D140531/new/

https://reviews.llvm.org/D140531

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


  1   2   >