Matt Arsenault | b2cb5f8 | 2016-07-09 07:55:03 +0000 | [diff] [blame] | 1 | ; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s |
Matt Arsenault | 0989d51 | 2014-06-26 17:22:30 +0000 | [diff] [blame] | 2 | |
Matt Arsenault | b2cb5f8 | 2016-07-09 07:55:03 +0000 | [diff] [blame] | 3 | ; GCN-LABEL: {{^}}test_default_si: |
| 4 | ; GCN: FloatMode: 192 |
Wei Ding | 3cb2a1e | 2016-10-19 22:34:49 +0000 | [diff] [blame] | 5 | ; GCN: IeeeMode: 1 |
Matt Arsenault | b2cb5f8 | 2016-07-09 07:55:03 +0000 | [diff] [blame] | 6 | define void @test_default_si(float addrspace(1)* %out0, double addrspace(1)* %out1) #0 { |
Matt Arsenault | 0989d51 | 2014-06-26 17:22:30 +0000 | [diff] [blame] | 7 | store float 0.0, float addrspace(1)* %out0 |
| 8 | store double 0.0, double addrspace(1)* %out1 |
| 9 | ret void |
| 10 | } |
Matt Arsenault | b2cb5f8 | 2016-07-09 07:55:03 +0000 | [diff] [blame] | 11 | |
| 12 | ; GCN-LABEL: {{^}}test_default_vi: |
| 13 | ; GCN: FloatMode: 192 |
Wei Ding | 3cb2a1e | 2016-10-19 22:34:49 +0000 | [diff] [blame] | 14 | ; GCN: IeeeMode: 1 |
Matt Arsenault | b2cb5f8 | 2016-07-09 07:55:03 +0000 | [diff] [blame] | 15 | define void @test_default_vi(float addrspace(1)* %out0, double addrspace(1)* %out1) #1 { |
| 16 | store float 0.0, float addrspace(1)* %out0 |
| 17 | store double 0.0, double addrspace(1)* %out1 |
| 18 | ret void |
| 19 | } |
| 20 | |
| 21 | ; GCN-LABEL: {{^}}test_f64_denormals: |
| 22 | ; GCN: FloatMode: 192 |
Wei Ding | 3cb2a1e | 2016-10-19 22:34:49 +0000 | [diff] [blame] | 23 | ; GCN: IeeeMode: 1 |
Matt Arsenault | b2cb5f8 | 2016-07-09 07:55:03 +0000 | [diff] [blame] | 24 | define void @test_f64_denormals(float addrspace(1)* %out0, double addrspace(1)* %out1) #2 { |
| 25 | store float 0.0, float addrspace(1)* %out0 |
| 26 | store double 0.0, double addrspace(1)* %out1 |
| 27 | ret void |
| 28 | } |
| 29 | |
| 30 | ; GCN-LABEL: {{^}}test_f32_denormals: |
| 31 | ; GCNL: FloatMode: 48 |
Wei Ding | 3cb2a1e | 2016-10-19 22:34:49 +0000 | [diff] [blame] | 32 | ; GCN: IeeeMode: 1 |
Matt Arsenault | b2cb5f8 | 2016-07-09 07:55:03 +0000 | [diff] [blame] | 33 | define void @test_f32_denormals(float addrspace(1)* %out0, double addrspace(1)* %out1) #3 { |
| 34 | store float 0.0, float addrspace(1)* %out0 |
| 35 | store double 0.0, double addrspace(1)* %out1 |
| 36 | ret void |
| 37 | } |
| 38 | |
| 39 | ; GCN-LABEL: {{^}}test_f32_f64_denormals: |
| 40 | ; GCN: FloatMode: 240 |
Wei Ding | 3cb2a1e | 2016-10-19 22:34:49 +0000 | [diff] [blame] | 41 | ; GCN: IeeeMode: 1 |
Matt Arsenault | b2cb5f8 | 2016-07-09 07:55:03 +0000 | [diff] [blame] | 42 | define void @test_f32_f64_denormals(float addrspace(1)* %out0, double addrspace(1)* %out1) #4 { |
| 43 | store float 0.0, float addrspace(1)* %out0 |
| 44 | store double 0.0, double addrspace(1)* %out1 |
| 45 | ret void |
| 46 | } |
| 47 | |
| 48 | ; GCN-LABEL: {{^}}test_no_denormals |
| 49 | ; GCN: FloatMode: 0 |
Wei Ding | 3cb2a1e | 2016-10-19 22:34:49 +0000 | [diff] [blame] | 50 | ; GCN: IeeeMode: 1 |
Matt Arsenault | b2cb5f8 | 2016-07-09 07:55:03 +0000 | [diff] [blame] | 51 | define void @test_no_denormals(float addrspace(1)* %out0, double addrspace(1)* %out1) #5 { |
| 52 | store float 0.0, float addrspace(1)* %out0 |
| 53 | store double 0.0, double addrspace(1)* %out1 |
| 54 | ret void |
| 55 | } |
| 56 | |
Matt Arsenault | a6867fd | 2017-01-23 22:31:03 +0000 | [diff] [blame] | 57 | ; GCN-LABEL: {{^}}test_f16_f64_denormals: |
| 58 | ; GCN: FloatMode: 192 |
| 59 | ; GCN: IeeeMode: 1 |
| 60 | define void @test_f16_f64_denormals(half addrspace(1)* %out0, double addrspace(1)* %out1) #6 { |
| 61 | store half 0.0, half addrspace(1)* %out0 |
| 62 | store double 0.0, double addrspace(1)* %out1 |
| 63 | ret void |
| 64 | } |
| 65 | |
| 66 | ; GCN-LABEL: {{^}}test_no_f16_f64_denormals: |
| 67 | ; GCN: FloatMode: 0 |
| 68 | ; GCN: IeeeMode: 1 |
| 69 | define void @test_no_f16_f64_denormals(half addrspace(1)* %out0, double addrspace(1)* %out1) #7 { |
| 70 | store half 0.0, half addrspace(1)* %out0 |
| 71 | store double 0.0, double addrspace(1)* %out1 |
| 72 | ret void |
| 73 | } |
| 74 | |
| 75 | ; GCN-LABEL: {{^}}test_f32_f16_f64_denormals: |
| 76 | ; GCN: FloatMode: 240 |
| 77 | ; GCN: IeeeMode: 1 |
| 78 | define void @test_f32_f16_f64_denormals(half addrspace(1)* %out0, float addrspace(1)* %out1, double addrspace(1)* %out2) #8 { |
| 79 | store half 0.0, half addrspace(1)* %out0 |
| 80 | store float 0.0, float addrspace(1)* %out1 |
| 81 | store double 0.0, double addrspace(1)* %out2 |
| 82 | ret void |
| 83 | } |
| 84 | |
Wei Ding | 3cb2a1e | 2016-10-19 22:34:49 +0000 | [diff] [blame] | 85 | ; GCN-LABEL: {{^}}kill_gs_const: |
| 86 | ; GCN: IeeeMode: 0 |
| 87 | define amdgpu_gs void @kill_gs_const() { |
| 88 | main_body: |
| 89 | %0 = icmp ule i32 0, 3 |
| 90 | %1 = select i1 %0, float 1.000000e+00, float -1.000000e+00 |
| 91 | call void @llvm.AMDGPU.kill(float %1) |
| 92 | %2 = icmp ule i32 3, 0 |
| 93 | %3 = select i1 %2, float 1.000000e+00, float -1.000000e+00 |
| 94 | call void @llvm.AMDGPU.kill(float %3) |
| 95 | ret void |
| 96 | } |
| 97 | |
| 98 | ; GCN-LABEL: {{^}}kill_vcc_implicit_def: |
| 99 | ; GCN: IeeeMode: 0 |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame^] | 100 | define amdgpu_ps float @kill_vcc_implicit_def([6 x <16 x i8>] addrspace(2)* byval, [17 x <16 x i8>] addrspace(2)* byval, [17 x <4 x i32>] addrspace(2)* byval, [34 x <8 x i32>] addrspace(2)* byval, float inreg, i32 inreg, <2 x i32>, <2 x i32>, <2 x i32>, <3 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, float, float, float, float, float, float, i32, float, float) { |
Wei Ding | 3cb2a1e | 2016-10-19 22:34:49 +0000 | [diff] [blame] | 101 | entry: |
| 102 | %tmp0 = fcmp olt float %13, 0.0 |
| 103 | call void @llvm.AMDGPU.kill(float %14) |
| 104 | %tmp1 = select i1 %tmp0, float 1.0, float 0.0 |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame^] | 105 | ret float %tmp1 |
Wei Ding | 3cb2a1e | 2016-10-19 22:34:49 +0000 | [diff] [blame] | 106 | } |
| 107 | |
Wei Ding | 3cb2a1e | 2016-10-19 22:34:49 +0000 | [diff] [blame] | 108 | declare void @llvm.AMDGPU.kill(float) |
Wei Ding | 3cb2a1e | 2016-10-19 22:34:49 +0000 | [diff] [blame] | 109 | |
Matt Arsenault | b2cb5f8 | 2016-07-09 07:55:03 +0000 | [diff] [blame] | 110 | attributes #0 = { nounwind "target-cpu"="tahiti" } |
| 111 | attributes #1 = { nounwind "target-cpu"="fiji" } |
| 112 | attributes #2 = { nounwind "target-features"="+fp64-denormals" } |
| 113 | attributes #3 = { nounwind "target-features"="+fp32-denormals" } |
| 114 | attributes #4 = { nounwind "target-features"="+fp32-denormals,+fp64-denormals" } |
Matt Arsenault | a6867fd | 2017-01-23 22:31:03 +0000 | [diff] [blame] | 115 | attributes #5 = { nounwind "target-features"="-fp32-denormals,-fp64-fp16-denormals" } |
| 116 | attributes #6 = { nounwind "target-features"="+fp64-fp16-denormals" } |
| 117 | attributes #7 = { nounwind "target-features"="-fp64-fp16-denormals" } |
| 118 | attributes #8 = { nounwind "target-features"="+fp32-denormals,+fp64-fp16-denormals" } |