Skip to content

Commit 65cf77d

Browse files
committed
[clang] Use FP options from AST for emitting code for casts
Differential Revision: https://reviews.llvm.org/D142001
1 parent 58751f9 commit 65cf77d

File tree

3 files changed

+36
-34
lines changed

3 files changed

+36
-34
lines changed

clang/lib/CodeGen/CGExprScalar.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2021,6 +2021,7 @@ Value *ScalarExprEmitter::VisitCastExpr(CastExpr *CE) {
20212021
Expr *E = CE->getSubExpr();
20222022
QualType DestTy = CE->getType();
20232023
CastKind Kind = CE->getCastKind();
2024+
CodeGenFunction::CGFPOptionsRAII FPOptions(CGF, CE);
20242025

20252026
// These cases are generally not written to ignore the result of
20262027
// evaluating their sub-expressions, so we clear this now.

clang/test/CodeGen/X86/avx512dq-builtins-constrained.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
// REQUIRES: x86-registered-target
22
// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512dq -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=UNCONSTRAINED --check-prefix=COMMON --check-prefix=COMMONIR
3-
// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512dq -ffp-exception-behavior=maytrap -DSTRICT=1 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=CONSTRAINED --check-prefix=COMMON --check-prefix=COMMONIR
3+
// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512dq -ffp-exception-behavior=maytrap -DSTRICT=1 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=CONSTRAINED --check-prefix=COMMON --check-prefix=COMMONIR --implicit-check-not=fpexcept.maytrap
44
// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512dq -S -o - -Wall -Werror | FileCheck %s --check-prefix=CHECK-ASM --check-prefix=COMMON
5-
// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512dq -ffp-exception-behavior=maytrap -DSTRICT=1 -S -o - -Wall -Werror | FileCheck %s --check-prefix=CHECK-ASM --check-prefix=COMMON
5+
// RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512dq -ffp-exception-behavior=maytrap -DSTRICT=1 -S -o - -Wall -Werror | FileCheck %s --check-prefix=CHECK-ASM --check-prefix=COMMON --implicit-check-not=fpexcept.maytrap
6+
7+
// Any cases of "fpexcept.maytrap" in this test are clang bugs.
68

7-
// FIXME: Every instance of "fpexcept.maytrap" is wrong.
89
#ifdef STRICT
910
// Test that the constrained intrinsics are picking up the exception
1011
// metadata from the AST instead of the global default from the command line.
@@ -18,15 +19,15 @@
1819
__m512d test_mm512_cvtepi64_pd(__m512i __A) {
1920
// COMMON-LABEL: test_mm512_cvtepi64_pd
2021
// UNCONSTRAINED: sitofp <8 x i64> %{{.*}} to <8 x double>
21-
// CONSTRAINED: call <8 x double> @llvm.experimental.constrained.sitofp.v8f64.v8i64(<8 x i64> %{{.*}}, metadata !"round.tonearest", metadata !"fpexcept.maytrap")
22+
// CONSTRAINED: call <8 x double> @llvm.experimental.constrained.sitofp.v8f64.v8i64(<8 x i64> %{{.*}}, metadata !"round.tonearest", metadata !"fpexcept.strict")
2223
// CHECK-ASM: vcvtqq2pd
2324
return _mm512_cvtepi64_pd(__A);
2425
}
2526

2627
__m512d test_mm512_mask_cvtepi64_pd(__m512d __W, __mmask8 __U, __m512i __A) {
2728
// COMMON-LABEL: test_mm512_mask_cvtepi64_pd
2829
// UNCONSTRAINED: sitofp <8 x i64> %{{.*}} to <8 x double>
29-
// CONSTRAINED: call <8 x double> @llvm.experimental.constrained.sitofp.v8f64.v8i64(<8 x i64> %{{.*}}, metadata !"round.tonearest", metadata !"fpexcept.maytrap")
30+
// CONSTRAINED: call <8 x double> @llvm.experimental.constrained.sitofp.v8f64.v8i64(<8 x i64> %{{.*}}, metadata !"round.tonearest", metadata !"fpexcept.strict")
3031
// COMMONIR: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
3132
// CHECK-ASM: vcvtqq2pd
3233
return _mm512_mask_cvtepi64_pd(__W, __U, __A);
@@ -35,7 +36,7 @@ __m512d test_mm512_mask_cvtepi64_pd(__m512d __W, __mmask8 __U, __m512i __A) {
3536
__m512d test_mm512_maskz_cvtepi64_pd(__mmask8 __U, __m512i __A) {
3637
// COMMON-LABEL: test_mm512_maskz_cvtepi64_pd
3738
// UNCONSTRAINED: sitofp <8 x i64> %{{.*}} to <8 x double>
38-
// CONSTRAINED: call <8 x double> @llvm.experimental.constrained.sitofp.v8f64.v8i64(<8 x i64> %{{.*}}, metadata !"round.tonearest", metadata !"fpexcept.maytrap")
39+
// CONSTRAINED: call <8 x double> @llvm.experimental.constrained.sitofp.v8f64.v8i64(<8 x i64> %{{.*}}, metadata !"round.tonearest", metadata !"fpexcept.strict")
3940
// COMMONIR: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
4041
// CHECK-ASM: vcvtqq2pd
4142
return _mm512_maskz_cvtepi64_pd(__U, __A);
@@ -116,15 +117,15 @@ __m256 test_mm512_maskz_cvt_roundepi64_ps(__mmask8 __U, __m512i __A) {
116117
__m512d test_mm512_cvtepu64_pd(__m512i __A) {
117118
// COMMON-LABEL: test_mm512_cvtepu64_pd
118119
// UNCONSTRAINED: uitofp <8 x i64> %{{.*}} to <8 x double>
119-
// CONSTRAINED: call <8 x double> @llvm.experimental.constrained.uitofp.v8f64.v8i64(<8 x i64> %{{.*}}, metadata !"round.tonearest", metadata !"fpexcept.maytrap")
120+
// CONSTRAINED: call <8 x double> @llvm.experimental.constrained.uitofp.v8f64.v8i64(<8 x i64> %{{.*}}, metadata !"round.tonearest", metadata !"fpexcept.strict")
120121
// CHECK-ASM: vcvtuqq2pd
121122
return _mm512_cvtepu64_pd(__A);
122123
}
123124

124125
__m512d test_mm512_mask_cvtepu64_pd(__m512d __W, __mmask8 __U, __m512i __A) {
125126
// COMMON-LABEL: test_mm512_mask_cvtepu64_pd
126127
// UNCONSTRAINED: uitofp <8 x i64> %{{.*}} to <8 x double>
127-
// CONSTRAINED: call <8 x double> @llvm.experimental.constrained.uitofp.v8f64.v8i64(<8 x i64> %{{.*}}, metadata !"round.tonearest", metadata !"fpexcept.maytrap")
128+
// CONSTRAINED: call <8 x double> @llvm.experimental.constrained.uitofp.v8f64.v8i64(<8 x i64> %{{.*}}, metadata !"round.tonearest", metadata !"fpexcept.strict")
128129
// COMMONIR: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
129130
// CHECK-ASM: vcvtuqq2pd
130131
return _mm512_mask_cvtepu64_pd(__W, __U, __A);
@@ -133,7 +134,7 @@ __m512d test_mm512_mask_cvtepu64_pd(__m512d __W, __mmask8 __U, __m512i __A) {
133134
__m512d test_mm512_maskz_cvtepu64_pd(__mmask8 __U, __m512i __A) {
134135
// COMMON-LABEL: test_mm512_maskz_cvtepu64_pd
135136
// UNCONSTRAINED: uitofp <8 x i64> %{{.*}} to <8 x double>
136-
// CONSTRAINED: call <8 x double> @llvm.experimental.constrained.uitofp.v8f64.v8i64(<8 x i64> %{{.*}}, metadata !"round.tonearest", metadata !"fpexcept.maytrap")
137+
// CONSTRAINED: call <8 x double> @llvm.experimental.constrained.uitofp.v8f64.v8i64(<8 x i64> %{{.*}}, metadata !"round.tonearest", metadata !"fpexcept.strict")
137138
// COMMONIR: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
138139
// CHECK-ASM: vcvtuqq2pd
139140
return _mm512_maskz_cvtepu64_pd(__U, __A);

0 commit comments

Comments
 (0)