Skip to content

Commit 6532c48

Browse files
committed
enable fast-math flags
1 parent a8f0c2d commit 6532c48

15 files changed

+103
-101
lines changed

src/librustc_trans/intrinsic.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -1237,9 +1237,11 @@ fn generic_simd_intrinsic<'a, 'tcx>(
12371237

12381238
let llvm_name = &format!("llvm.{0}.v{1}{2}", name, in_len, ety);
12391239
let intrinsic = bx.cx.get_intrinsic(&llvm_name);
1240-
return Ok(bx.call(intrinsic,
1241-
&args.iter().map(|arg| arg.immediate()).collect::<Vec<_>>(),
1242-
None));
1240+
let c = bx.call(intrinsic,
1241+
&args.iter().map(|arg| arg.immediate()).collect::<Vec<_>>(),
1242+
None);
1243+
unsafe { llvm::LLVMRustSetHasUnsafeAlgebra(c) };
1244+
return Ok(c);
12431245
}
12441246

12451247
if name == "simd_fsqrt" {

src/test/codegen/simd-intrinsic-float-abs.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -44,28 +44,28 @@ extern "platform-intrinsic" {
4444
// CHECK-LABEL: @fabs_32x2
4545
#[no_mangle]
4646
pub unsafe fn fabs_32x2(a: f32x2) -> f32x2 {
47-
// CHECK: call <2 x float> @llvm.fabs.v2f32
47+
// CHECK: call fast <2 x float> @llvm.fabs.v2f32
4848
simd_fabs(a)
4949
}
5050

5151
// CHECK-LABEL: @fabs_32x4
5252
#[no_mangle]
5353
pub unsafe fn fabs_32x4(a: f32x4) -> f32x4 {
54-
// CHECK: call <4 x float> @llvm.fabs.v4f32
54+
// CHECK: call fast <4 x float> @llvm.fabs.v4f32
5555
simd_fabs(a)
5656
}
5757

5858
// CHECK-LABEL: @fabs_32x8
5959
#[no_mangle]
6060
pub unsafe fn fabs_32x8(a: f32x8) -> f32x8 {
61-
// CHECK: call <8 x float> @llvm.fabs.v8f32
61+
// CHECK: call fast <8 x float> @llvm.fabs.v8f32
6262
simd_fabs(a)
6363
}
6464

6565
// CHECK-LABEL: @fabs_32x16
6666
#[no_mangle]
6767
pub unsafe fn fabs_32x16(a: f32x16) -> f32x16 {
68-
// CHECK: call <16 x float> @llvm.fabs.v16f32
68+
// CHECK: call fast <16 x float> @llvm.fabs.v16f32
6969
simd_fabs(a)
7070
}
7171

@@ -85,20 +85,20 @@ pub struct f64x8(pub f64, pub f64, pub f64, pub f64,
8585
// CHECK-LABEL: @fabs_64x4
8686
#[no_mangle]
8787
pub unsafe fn fabs_64x4(a: f64x4) -> f64x4 {
88-
// CHECK: call <4 x double> @llvm.fabs.v4f64
88+
// CHECK: call fast <4 x double> @llvm.fabs.v4f64
8989
simd_fabs(a)
9090
}
9191

9292
// CHECK-LABEL: @fabs_64x2
9393
#[no_mangle]
9494
pub unsafe fn fabs_64x2(a: f64x2) -> f64x2 {
95-
// CHECK: call <2 x double> @llvm.fabs.v2f64
95+
// CHECK: call fast <2 x double> @llvm.fabs.v2f64
9696
simd_fabs(a)
9797
}
9898

9999
// CHECK-LABEL: @fabs_64x8
100100
#[no_mangle]
101101
pub unsafe fn fabs_64x8(a: f64x8) -> f64x8 {
102-
// CHECK: call <8 x double> @llvm.fabs.v8f64
102+
// CHECK: call fast <8 x double> @llvm.fabs.v8f64
103103
simd_fabs(a)
104104
}

src/test/codegen/simd-intrinsic-float-ceil.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -44,28 +44,28 @@ extern "platform-intrinsic" {
4444
// CHECK-LABEL: @ceil_32x2
4545
#[no_mangle]
4646
pub unsafe fn ceil_32x2(a: f32x2) -> f32x2 {
47-
// CHECK: call <2 x float> @llvm.ceil.v2f32
47+
// CHECK: call fast <2 x float> @llvm.ceil.v2f32
4848
simd_ceil(a)
4949
}
5050

5151
// CHECK-LABEL: @ceil_32x4
5252
#[no_mangle]
5353
pub unsafe fn ceil_32x4(a: f32x4) -> f32x4 {
54-
// CHECK: call <4 x float> @llvm.ceil.v4f32
54+
// CHECK: call fast <4 x float> @llvm.ceil.v4f32
5555
simd_ceil(a)
5656
}
5757

5858
// CHECK-LABEL: @ceil_32x8
5959
#[no_mangle]
6060
pub unsafe fn ceil_32x8(a: f32x8) -> f32x8 {
61-
// CHECK: call <8 x float> @llvm.ceil.v8f32
61+
// CHECK: call fast <8 x float> @llvm.ceil.v8f32
6262
simd_ceil(a)
6363
}
6464

6565
// CHECK-LABEL: @ceil_32x16
6666
#[no_mangle]
6767
pub unsafe fn ceil_32x16(a: f32x16) -> f32x16 {
68-
// CHECK: call <16 x float> @llvm.ceil.v16f32
68+
// CHECK: call fast <16 x float> @llvm.ceil.v16f32
6969
simd_ceil(a)
7070
}
7171

@@ -85,20 +85,20 @@ pub struct f64x8(pub f64, pub f64, pub f64, pub f64,
8585
// CHECK-LABEL: @ceil_64x4
8686
#[no_mangle]
8787
pub unsafe fn ceil_64x4(a: f64x4) -> f64x4 {
88-
// CHECK: call <4 x double> @llvm.ceil.v4f64
88+
// CHECK: call fast <4 x double> @llvm.ceil.v4f64
8989
simd_ceil(a)
9090
}
9191

9292
// CHECK-LABEL: @ceil_64x2
9393
#[no_mangle]
9494
pub unsafe fn ceil_64x2(a: f64x2) -> f64x2 {
95-
// CHECK: call <2 x double> @llvm.ceil.v2f64
95+
// CHECK: call fast <2 x double> @llvm.ceil.v2f64
9696
simd_ceil(a)
9797
}
9898

9999
// CHECK-LABEL: @ceil_64x8
100100
#[no_mangle]
101101
pub unsafe fn ceil_64x8(a: f64x8) -> f64x8 {
102-
// CHECK: call <8 x double> @llvm.ceil.v8f64
102+
// CHECK: call fast <8 x double> @llvm.ceil.v8f64
103103
simd_ceil(a)
104104
}

src/test/codegen/simd-intrinsic-float-cos.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -44,28 +44,28 @@ extern "platform-intrinsic" {
4444
// CHECK-LABEL: @fcos_32x2
4545
#[no_mangle]
4646
pub unsafe fn fcos_32x2(a: f32x2) -> f32x2 {
47-
// CHECK: call <2 x float> @llvm.cos.v2f32
47+
// CHECK: call fast <2 x float> @llvm.cos.v2f32
4848
simd_fcos(a)
4949
}
5050

5151
// CHECK-LABEL: @fcos_32x4
5252
#[no_mangle]
5353
pub unsafe fn fcos_32x4(a: f32x4) -> f32x4 {
54-
// CHECK: call <4 x float> @llvm.cos.v4f32
54+
// CHECK: call fast <4 x float> @llvm.cos.v4f32
5555
simd_fcos(a)
5656
}
5757

5858
// CHECK-LABEL: @fcos_32x8
5959
#[no_mangle]
6060
pub unsafe fn fcos_32x8(a: f32x8) -> f32x8 {
61-
// CHECK: call <8 x float> @llvm.cos.v8f32
61+
// CHECK: call fast <8 x float> @llvm.cos.v8f32
6262
simd_fcos(a)
6363
}
6464

6565
// CHECK-LABEL: @fcos_32x16
6666
#[no_mangle]
6767
pub unsafe fn fcos_32x16(a: f32x16) -> f32x16 {
68-
// CHECK: call <16 x float> @llvm.cos.v16f32
68+
// CHECK: call fast <16 x float> @llvm.cos.v16f32
6969
simd_fcos(a)
7070
}
7171

@@ -85,20 +85,20 @@ pub struct f64x8(pub f64, pub f64, pub f64, pub f64,
8585
// CHECK-LABEL: @fcos_64x4
8686
#[no_mangle]
8787
pub unsafe fn fcos_64x4(a: f64x4) -> f64x4 {
88-
// CHECK: call <4 x double> @llvm.cos.v4f64
88+
// CHECK: call fast <4 x double> @llvm.cos.v4f64
8989
simd_fcos(a)
9090
}
9191

9292
// CHECK-LABEL: @fcos_64x2
9393
#[no_mangle]
9494
pub unsafe fn fcos_64x2(a: f64x2) -> f64x2 {
95-
// CHECK: call <2 x double> @llvm.cos.v2f64
95+
// CHECK: call fast <2 x double> @llvm.cos.v2f64
9696
simd_fcos(a)
9797
}
9898

9999
// CHECK-LABEL: @fcos_64x8
100100
#[no_mangle]
101101
pub unsafe fn fcos_64x8(a: f64x8) -> f64x8 {
102-
// CHECK: call <8 x double> @llvm.cos.v8f64
102+
// CHECK: call fast <8 x double> @llvm.cos.v8f64
103103
simd_fcos(a)
104104
}

src/test/codegen/simd-intrinsic-float-exp.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -44,28 +44,28 @@ extern "platform-intrinsic" {
4444
// CHECK-LABEL: @exp_32x2
4545
#[no_mangle]
4646
pub unsafe fn exp_32x2(a: f32x2) -> f32x2 {
47-
// CHECK: call <2 x float> @llvm.exp.v2f32
47+
// CHECK: call fast <2 x float> @llvm.exp.v2f32
4848
simd_fexp(a)
4949
}
5050

5151
// CHECK-LABEL: @exp_32x4
5252
#[no_mangle]
5353
pub unsafe fn exp_32x4(a: f32x4) -> f32x4 {
54-
// CHECK: call <4 x float> @llvm.exp.v4f32
54+
// CHECK: call fast <4 x float> @llvm.exp.v4f32
5555
simd_fexp(a)
5656
}
5757

5858
// CHECK-LABEL: @exp_32x8
5959
#[no_mangle]
6060
pub unsafe fn exp_32x8(a: f32x8) -> f32x8 {
61-
// CHECK: call <8 x float> @llvm.exp.v8f32
61+
// CHECK: call fast <8 x float> @llvm.exp.v8f32
6262
simd_fexp(a)
6363
}
6464

6565
// CHECK-LABEL: @exp_32x16
6666
#[no_mangle]
6767
pub unsafe fn exp_32x16(a: f32x16) -> f32x16 {
68-
// CHECK: call <16 x float> @llvm.exp.v16f32
68+
// CHECK: call fast <16 x float> @llvm.exp.v16f32
6969
simd_fexp(a)
7070
}
7171

@@ -85,20 +85,20 @@ pub struct f64x8(pub f64, pub f64, pub f64, pub f64,
8585
// CHECK-LABEL: @exp_64x4
8686
#[no_mangle]
8787
pub unsafe fn exp_64x4(a: f64x4) -> f64x4 {
88-
// CHECK: call <4 x double> @llvm.exp.v4f64
88+
// CHECK: call fast <4 x double> @llvm.exp.v4f64
8989
simd_fexp(a)
9090
}
9191

9292
// CHECK-LABEL: @exp_64x2
9393
#[no_mangle]
9494
pub unsafe fn exp_64x2(a: f64x2) -> f64x2 {
95-
// CHECK: call <2 x double> @llvm.exp.v2f64
95+
// CHECK: call fast <2 x double> @llvm.exp.v2f64
9696
simd_fexp(a)
9797
}
9898

9999
// CHECK-LABEL: @exp_64x8
100100
#[no_mangle]
101101
pub unsafe fn exp_64x8(a: f64x8) -> f64x8 {
102-
// CHECK: call <8 x double> @llvm.exp.v8f64
102+
// CHECK: call fast <8 x double> @llvm.exp.v8f64
103103
simd_fexp(a)
104104
}

src/test/codegen/simd-intrinsic-float-exp2.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -44,28 +44,28 @@ extern "platform-intrinsic" {
4444
// CHECK-LABEL: @exp2_32x2
4545
#[no_mangle]
4646
pub unsafe fn exp2_32x2(a: f32x2) -> f32x2 {
47-
// CHECK: call <2 x float> @llvm.exp2.v2f32
47+
// CHECK: call fast <2 x float> @llvm.exp2.v2f32
4848
simd_fexp2(a)
4949
}
5050

5151
// CHECK-LABEL: @exp2_32x4
5252
#[no_mangle]
5353
pub unsafe fn exp2_32x4(a: f32x4) -> f32x4 {
54-
// CHECK: call <4 x float> @llvm.exp2.v4f32
54+
// CHECK: call fast <4 x float> @llvm.exp2.v4f32
5555
simd_fexp2(a)
5656
}
5757

5858
// CHECK-LABEL: @exp2_32x8
5959
#[no_mangle]
6060
pub unsafe fn exp2_32x8(a: f32x8) -> f32x8 {
61-
// CHECK: call <8 x float> @llvm.exp2.v8f32
61+
// CHECK: call fast <8 x float> @llvm.exp2.v8f32
6262
simd_fexp2(a)
6363
}
6464

6565
// CHECK-LABEL: @exp2_32x16
6666
#[no_mangle]
6767
pub unsafe fn exp2_32x16(a: f32x16) -> f32x16 {
68-
// CHECK: call <16 x float> @llvm.exp2.v16f32
68+
// CHECK: call fast <16 x float> @llvm.exp2.v16f32
6969
simd_fexp2(a)
7070
}
7171

@@ -85,20 +85,20 @@ pub struct f64x8(pub f64, pub f64, pub f64, pub f64,
8585
// CHECK-LABEL: @exp2_64x4
8686
#[no_mangle]
8787
pub unsafe fn exp2_64x4(a: f64x4) -> f64x4 {
88-
// CHECK: call <4 x double> @llvm.exp2.v4f64
88+
// CHECK: call fast <4 x double> @llvm.exp2.v4f64
8989
simd_fexp2(a)
9090
}
9191

9292
// CHECK-LABEL: @exp2_64x2
9393
#[no_mangle]
9494
pub unsafe fn exp2_64x2(a: f64x2) -> f64x2 {
95-
// CHECK: call <2 x double> @llvm.exp2.v2f64
95+
// CHECK: call fast <2 x double> @llvm.exp2.v2f64
9696
simd_fexp2(a)
9797
}
9898

9999
// CHECK-LABEL: @exp2_64x8
100100
#[no_mangle]
101101
pub unsafe fn exp2_64x8(a: f64x8) -> f64x8 {
102-
// CHECK: call <8 x double> @llvm.exp2.v8f64
102+
// CHECK: call fast <8 x double> @llvm.exp2.v8f64
103103
simd_fexp2(a)
104104
}

src/test/codegen/simd-intrinsic-float-floor.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -44,28 +44,28 @@ extern "platform-intrinsic" {
4444
// CHECK-LABEL: @floor_32x2
4545
#[no_mangle]
4646
pub unsafe fn floor_32x2(a: f32x2) -> f32x2 {
47-
// CHECK: call <2 x float> @llvm.floor.v2f32
47+
// CHECK: call fast <2 x float> @llvm.floor.v2f32
4848
simd_floor(a)
4949
}
5050

5151
// CHECK-LABEL: @floor_32x4
5252
#[no_mangle]
5353
pub unsafe fn floor_32x4(a: f32x4) -> f32x4 {
54-
// CHECK: call <4 x float> @llvm.floor.v4f32
54+
// CHECK: call fast <4 x float> @llvm.floor.v4f32
5555
simd_floor(a)
5656
}
5757

5858
// CHECK-LABEL: @floor_32x8
5959
#[no_mangle]
6060
pub unsafe fn floor_32x8(a: f32x8) -> f32x8 {
61-
// CHECK: call <8 x float> @llvm.floor.v8f32
61+
// CHECK: call fast <8 x float> @llvm.floor.v8f32
6262
simd_floor(a)
6363
}
6464

6565
// CHECK-LABEL: @floor_32x16
6666
#[no_mangle]
6767
pub unsafe fn floor_32x16(a: f32x16) -> f32x16 {
68-
// CHECK: call <16 x float> @llvm.floor.v16f32
68+
// CHECK: call fast <16 x float> @llvm.floor.v16f32
6969
simd_floor(a)
7070
}
7171

@@ -85,20 +85,20 @@ pub struct f64x8(pub f64, pub f64, pub f64, pub f64,
8585
// CHECK-LABEL: @floor_64x4
8686
#[no_mangle]
8787
pub unsafe fn floor_64x4(a: f64x4) -> f64x4 {
88-
// CHECK: call <4 x double> @llvm.floor.v4f64
88+
// CHECK: call fast <4 x double> @llvm.floor.v4f64
8989
simd_floor(a)
9090
}
9191

9292
// CHECK-LABEL: @floor_64x2
9393
#[no_mangle]
9494
pub unsafe fn floor_64x2(a: f64x2) -> f64x2 {
95-
// CHECK: call <2 x double> @llvm.floor.v2f64
95+
// CHECK: call fast <2 x double> @llvm.floor.v2f64
9696
simd_floor(a)
9797
}
9898

9999
// CHECK-LABEL: @floor_64x8
100100
#[no_mangle]
101101
pub unsafe fn floor_64x8(a: f64x8) -> f64x8 {
102-
// CHECK: call <8 x double> @llvm.floor.v8f64
102+
// CHECK: call fast <8 x double> @llvm.floor.v8f64
103103
simd_floor(a)
104104
}

0 commit comments

Comments
 (0)