10
10
// reduce this test to only match the first lines and the ret instructions.
11
11
12
12
#![ feature( autodiff) ]
13
- #![ feature( intrinsics ) ]
13
+ #![ feature( core_intrinsics ) ]
14
14
15
15
use std:: autodiff:: autodiff_forward;
16
16
@@ -22,7 +22,7 @@ fn square(x: &f32) -> f32 {
22
22
x * x
23
23
}
24
24
25
- // d_sqaure2
25
+ // d_square2
26
26
// CHECK: define internal fastcc [4 x float] @fwddiffe4square(float %x.0.val, [4 x ptr] %"x'")
27
27
// CHECK-NEXT: start:
28
28
// CHECK-NEXT: %0 = extractvalue [4 x ptr] %"x'", 0
@@ -33,24 +33,20 @@ fn square(x: &f32) -> f32 {
33
33
// CHECK-NEXT: %"_2'ipl2" = load float, ptr %2, align 4
34
34
// CHECK-NEXT: %3 = extractvalue [4 x ptr] %"x'", 3
35
35
// CHECK-NEXT: %"_2'ipl3" = load float, ptr %3, align 4
36
- // CHECK-NEXT: %4 = insertelement <4 x float> poison, float %"_2'ipl", i64 0
37
- // CHECK-NEXT: %5 = insertelement <4 x float> %4, float %"_2'ipl1", i64 1
38
- // CHECK-NEXT: %6 = insertelement <4 x float> %5, float %"_2'ipl2", i64 2
39
- // CHECK-NEXT: %7 = insertelement <4 x float> %6, float %"_2'ipl3", i64 3
40
- // CHECK-NEXT: %8 = fadd fast <4 x float> %7, %7
41
- // CHECK-NEXT: %9 = insertelement <4 x float> poison, float %x.0.val, i64 0
42
- // CHECK-NEXT: %10 = shufflevector <4 x float> %9, <4 x float> poison, <4 x i32> zeroinitializer
43
- // CHECK-NEXT: %11 = fmul fast <4 x float> %8, %10
44
- // CHECK-NEXT: %12 = extractelement <4 x float> %11, i64 0
45
- // CHECK-NEXT: %13 = insertvalue [4 x float] undef, float %12, 0
46
- // CHECK-NEXT: %14 = extractelement <4 x float> %11, i64 1
47
- // CHECK-NEXT: %15 = insertvalue [4 x float] %13, float %14, 1
48
- // CHECK-NEXT: %16 = extractelement <4 x float> %11, i64 2
49
- // CHECK-NEXT: %17 = insertvalue [4 x float] %15, float %16, 2
50
- // CHECK-NEXT: %18 = extractelement <4 x float> %11, i64 3
51
- // CHECK-NEXT: %19 = insertvalue [4 x float] %17, float %18, 3
52
- // CHECK-NEXT: ret [4 x float] %19
53
- // CHECK-NEXT: }
36
+ // CHECK-NEXT: %4 = fadd fast float %"_2'ipl", %"_2'ipl"
37
+ // CHECK-NEXT: %5 = fmul fast float %4, %x.0.val
38
+ // CHECK-NEXT: %6 = insertvalue [4 x float] undef, float %5, 0
39
+ // CHECK-NEXT: %7 = fadd fast float %"_2'ipl1", %"_2'ipl1"
40
+ // CHECK-NEXT: %8 = fmul fast float %7, %x.0.val
41
+ // CHECK-NEXT: %9 = insertvalue [4 x float] %6, float %8, 1
42
+ // CHECK-NEXT: %10 = fadd fast float %"_2'ipl2", %"_2'ipl2"
43
+ // CHECK-NEXT: %11 = fmul fast float %10, %x.0.val
44
+ // CHECK-NEXT: %12 = insertvalue [4 x float] %9, float %11, 2
45
+ // CHECK-NEXT: %13 = fadd fast float %"_2'ipl3", %"_2'ipl3"
46
+ // CHECK-NEXT: %14 = fmul fast float %13, %x.0.val
47
+ // CHECK-NEXT: %15 = insertvalue [4 x float] %12, float %14, 3
48
+ // CHECK-NEXT: ret [4 x float] %15
49
+ // CHECK-NEXT: }
54
50
55
51
// d_square3, the extra float is the original return value (x * x)
56
52
// CHECK: define internal fastcc { float, [4 x float] } @fwddiffe4square.1(float %x.0.val, [4 x ptr] %"x'")
@@ -64,26 +60,22 @@ fn square(x: &f32) -> f32 {
64
60
// CHECK-NEXT: %3 = extractvalue [4 x ptr] %"x'", 3
65
61
// CHECK-NEXT: %"_2'ipl3" = load float, ptr %3, align 4
66
62
// CHECK-NEXT: %_0 = fmul float %x.0.val, %x.0.val
67
- // CHECK-NEXT: %4 = insertelement <4 x float> poison, float %"_2'ipl", i64 0
68
- // CHECK-NEXT: %5 = insertelement <4 x float> %4, float %"_2'ipl1", i64 1
69
- // CHECK-NEXT: %6 = insertelement <4 x float> %5, float %"_2'ipl2", i64 2
70
- // CHECK-NEXT: %7 = insertelement <4 x float> %6, float %"_2'ipl3", i64 3
71
- // CHECK-NEXT: %8 = fadd fast <4 x float> %7, %7
72
- // CHECK-NEXT: %9 = insertelement <4 x float> poison, float %x.0.val, i64 0
73
- // CHECK-NEXT: %10 = shufflevector <4 x float> %9, <4 x float> poison, <4 x i32> zeroinitializer
74
- // CHECK-NEXT: %11 = fmul fast <4 x float> %8, %10
75
- // CHECK-NEXT: %12 = extractelement <4 x float> %11, i64 0
76
- // CHECK-NEXT: %13 = insertvalue [4 x float] undef, float %12, 0
77
- // CHECK-NEXT: %14 = extractelement <4 x float> %11, i64 1
78
- // CHECK-NEXT: %15 = insertvalue [4 x float] %13, float %14, 1
79
- // CHECK-NEXT: %16 = extractelement <4 x float> %11, i64 2
80
- // CHECK-NEXT: %17 = insertvalue [4 x float] %15, float %16, 2
81
- // CHECK-NEXT: %18 = extractelement <4 x float> %11, i64 3
82
- // CHECK-NEXT: %19 = insertvalue [4 x float] %17, float %18, 3
83
- // CHECK-NEXT: %20 = insertvalue { float, [4 x float] } undef, float %_0, 0
84
- // CHECK-NEXT: %21 = insertvalue { float, [4 x float] } %20, [4 x float] %19, 1
85
- // CHECK-NEXT: ret { float, [4 x float] } %21
86
- // CHECK-NEXT: }
63
+ // CHECK-NEXT: %4 = fadd fast float %"_2'ipl", %"_2'ipl"
64
+ // CHECK-NEXT: %5 = fmul fast float %4, %x.0.val
65
+ // CHECK-NEXT: %6 = insertvalue [4 x float] undef, float %5, 0
66
+ // CHECK-NEXT: %7 = fadd fast float %"_2'ipl1", %"_2'ipl1"
67
+ // CHECK-NEXT: %8 = fmul fast float %7, %x.0.val
68
+ // CHECK-NEXT: %9 = insertvalue [4 x float] %6, float %8, 1
69
+ // CHECK-NEXT: %10 = fadd fast float %"_2'ipl2", %"_2'ipl2"
70
+ // CHECK-NEXT: %11 = fmul fast float %10, %x.0.val
71
+ // CHECK-NEXT: %12 = insertvalue [4 x float] %9, float %11, 2
72
+ // CHECK-NEXT: %13 = fadd fast float %"_2'ipl3", %"_2'ipl3"
73
+ // CHECK-NEXT: %14 = fmul fast float %13, %x.0.val
74
+ // CHECK-NEXT: %15 = insertvalue [4 x float] %12, float %14, 3
75
+ // CHECK-NEXT: %16 = insertvalue { float, [4 x float] } undef, float %_0, 0
76
+ // CHECK-NEXT: %17 = insertvalue { float, [4 x float] } %16, [4 x float] %15, 1
77
+ // CHECK-NEXT: ret { float, [4 x float] } %17
78
+ // CHECK-NEXT: }
87
79
88
80
fn main ( ) {
89
81
let x = std:: hint:: black_box ( 3.0 ) ;
0 commit comments