blob: 04754396a0f76cfbbc8c0991176357e893ad22bb [file] [log] [blame]
Matt Arsenaultc1a71212014-09-02 19:02:53 +00001; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +00002; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
Tom Stellard75aadc22012-12-11 21:25:42 +00003
Matt Arsenaultc1a71212014-09-02 19:02:53 +00004; FUNC-LABEL: sin_f32
5; EG: MULADD_IEEE *
6; EG: FRACT *
7; EG: ADD *
8; EG: SIN * T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
9; EG-NOT: SIN
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +000010
Tom Stellard326d6ec2014-11-05 14:50:53 +000011; SI: v_mul_f32
12; SI: v_fract_f32
13; SI: v_sin_f32
14; SI-NOT: v_sin_f32
Matt Arsenaultc1a71212014-09-02 19:02:53 +000015define void @sin_f32(float addrspace(1)* %out, float %x) #1 {
Tom Stellard3dbf1f82014-05-02 15:41:47 +000016 %sin = call float @llvm.sin.f32(float %x)
17 store float %sin, float addrspace(1)* %out
18 ret void
19}
20
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +000021; FUNC-LABEL: {{^}}safe_sin_3x_f32:
22; SI: v_mul_f32
23; SI: v_mul_f32
Tom Stellard326d6ec2014-11-05 14:50:53 +000024; SI: v_fract_f32
25; SI: v_sin_f32
26; SI-NOT: v_sin_f32
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +000027define void @safe_sin_3x_f32(float addrspace(1)* %out, float %x) #1 {
Matt Arsenaultc1a71212014-09-02 19:02:53 +000028 %y = fmul float 3.0, %x
29 %sin = call float @llvm.sin.f32(float %y)
30 store float %sin, float addrspace(1)* %out
31 ret void
32}
Matt Arsenaultad14ce82014-07-19 18:44:39 +000033
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +000034; FUNC-LABEL: {{^}}unsafe_sin_3x_f32:
35; SI-NOT: v_add_f32
36; SI: 0x3ef47644
37; SI: v_mul_f32
Tom Stellard326d6ec2014-11-05 14:50:53 +000038; SI: v_fract_f32
39; SI: v_sin_f32
40; SI-NOT: v_sin_f32
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +000041define void @unsafe_sin_3x_f32(float addrspace(1)* %out, float %x) #2 {
42 %y = fmul float 3.0, %x
43 %sin = call float @llvm.sin.f32(float %y)
44 store float %sin, float addrspace(1)* %out
45 ret void
46}
47
48; FUNC-LABEL: {{^}}safe_sin_2x_f32:
49; SI: v_add_f32
50; SI: v_mul_f32
51; SI: v_fract_f32
52; SI: v_sin_f32
53; SI-NOT: v_sin_f32
54define void @safe_sin_2x_f32(float addrspace(1)* %out, float %x) #1 {
Matt Arsenaultc1a71212014-09-02 19:02:53 +000055 %y = fmul float 2.0, %x
56 %sin = call float @llvm.sin.f32(float %y)
57 store float %sin, float addrspace(1)* %out
58 ret void
59}
60
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +000061; FUNC-LABEL: {{^}}unsafe_sin_2x_f32:
62; SI-NOT: v_add_f32
63; SI: 0x3ea2f983
64; SI: v_mul_f32
Tom Stellard326d6ec2014-11-05 14:50:53 +000065; SI: v_fract_f32
66; SI: v_sin_f32
67; SI-NOT: v_sin_f32
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +000068define void @unsafe_sin_2x_f32(float addrspace(1)* %out, float %x) #2 {
69 %y = fmul float 2.0, %x
70 %sin = call float @llvm.sin.f32(float %y)
71 store float %sin, float addrspace(1)* %out
72 ret void
73}
74
75; FUNC-LABEL: {{^}}test_safe_2sin_f32:
76; SI: v_add_f32
77; SI: v_mul_f32
78; SI: v_fract_f32
79; SI: v_sin_f32
80; SI-NOT: v_sin_f32
81define void @test_safe_2sin_f32(float addrspace(1)* %out, float %x) #1 {
82 %y = fmul float 2.0, %x
83 %sin = call float @llvm.sin.f32(float %y)
84 store float %sin, float addrspace(1)* %out
85 ret void
86}
87
88; FUNC-LABEL: {{^}}test_unsafe_2sin_f32:
89; SI: 0x3ea2f983
90; SI: v_mul_f32
91; SI: v_fract_f32
92; SI: v_sin_f32
93; SI-NOT: v_sin_f32
94define void @test_unsafe_2sin_f32(float addrspace(1)* %out, float %x) #2 {
Matt Arsenaultc1a71212014-09-02 19:02:53 +000095 %y = fmul float 2.0, %x
Matt Arsenaultad14ce82014-07-19 18:44:39 +000096 %sin = call float @llvm.sin.f32(float %y)
97 store float %sin, float addrspace(1)* %out
98 ret void
99}
100
Tom Stellard79243d92014-10-01 17:15:17 +0000101; FUNC-LABEL: {{^}}sin_v4f32:
Matt Arsenaultc1a71212014-09-02 19:02:53 +0000102; EG: SIN * T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
103; EG: SIN * T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
104; EG: SIN * T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
105; EG: SIN * T{{[0-9]+\.[XYZW], PV\.[XYZW]}}
106; EG-NOT: SIN
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +0000107
Tom Stellard326d6ec2014-11-05 14:50:53 +0000108; SI: v_sin_f32
109; SI: v_sin_f32
110; SI: v_sin_f32
111; SI: v_sin_f32
112; SI-NOT: v_sin_f32
Matt Arsenaultc1a71212014-09-02 19:02:53 +0000113define void @sin_v4f32(<4 x float> addrspace(1)* %out, <4 x float> %vx) #1 {
Tom Stellard3dbf1f82014-05-02 15:41:47 +0000114 %sin = call <4 x float> @llvm.sin.v4f32( <4 x float> %vx)
115 store <4 x float> %sin, <4 x float> addrspace(1)* %out
Tom Stellard75aadc22012-12-11 21:25:42 +0000116 ret void
117}
118
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +0000119declare float @llvm.sin.f32(float) #0
120declare <4 x float> @llvm.sin.v4f32(<4 x float>) #0
121
122attributes #0 = { nounwind readnone }
123attributes #1 = { nounwind "unsafe-fp-math"="false" }
124attributes #2 = { nounwind "unsafe-fp-math"="true" }