Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 1 | ; RUN: llc -march=amdgcn -mcpu=verde -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s |
| 2 | ; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,VI %s |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 3 | |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 4 | ; GCN-LABEL: {{^}}image_load_v4i32: |
| 5 | ; GCN: image_load v[0:3], v[0:3], s[0:7] dmask:0xf unorm |
| 6 | ; GCN: s_waitcnt vmcnt(0) |
| 7 | define amdgpu_ps <4 x float> @image_load_v4i32(<8 x i32> inreg %rsrc, <4 x i32> %c) #0 { |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 8 | main_body: |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 9 | %tex = call <4 x float> @llvm.amdgcn.image.load.v4f32.v4i32.v8i32(<4 x i32> %c, <8 x i32> %rsrc, i32 15, i1 false, i1 false, i1 false, i1 false) |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 10 | ret <4 x float> %tex |
| 11 | } |
| 12 | |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 13 | ; GCN-LABEL: {{^}}image_load_v2i32: |
| 14 | ; GCN: image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm |
| 15 | ; GCN: s_waitcnt vmcnt(0) |
| 16 | define amdgpu_ps <4 x float> @image_load_v2i32(<8 x i32> inreg %rsrc, <2 x i32> %c) #0 { |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 17 | main_body: |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 18 | %tex = call <4 x float> @llvm.amdgcn.image.load.v4f32.v2i32.v8i32(<2 x i32> %c, <8 x i32> %rsrc, i32 15, i1 false, i1 false, i1 false, i1 false) |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 19 | ret <4 x float> %tex |
| 20 | } |
| 21 | |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 22 | ; GCN-LABEL: {{^}}image_load_i32: |
| 23 | ; GCN: image_load v[0:3], v0, s[0:7] dmask:0xf unorm |
| 24 | ; GCN: s_waitcnt vmcnt(0) |
| 25 | define amdgpu_ps <4 x float> @image_load_i32(<8 x i32> inreg %rsrc, i32 %c) #0 { |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 26 | main_body: |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 27 | %tex = call <4 x float> @llvm.amdgcn.image.load.v4f32.i32.v8i32(i32 %c, <8 x i32> %rsrc, i32 15, i1 false, i1 false, i1 false, i1 false) |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 28 | ret <4 x float> %tex |
| 29 | } |
| 30 | |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 31 | ; GCN-LABEL: {{^}}image_load_mip: |
| 32 | ; GCN: image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm |
| 33 | ; GCN: s_waitcnt vmcnt(0) |
| 34 | define amdgpu_ps <4 x float> @image_load_mip(<8 x i32> inreg %rsrc, <4 x i32> %c) #0 { |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 35 | main_body: |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 36 | %tex = call <4 x float> @llvm.amdgcn.image.load.mip.v4f32.v4i32.v8i32(<4 x i32> %c, <8 x i32> %rsrc, i32 15, i1 false, i1 false, i1 false, i1 false) |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 37 | ret <4 x float> %tex |
| 38 | } |
| 39 | |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 40 | ; GCN-LABEL: {{^}}image_load_1: |
| 41 | ; GCN: image_load v0, v[0:3], s[0:7] dmask:0x1 unorm |
| 42 | ; GCN: s_waitcnt vmcnt(0) |
| 43 | define amdgpu_ps float @image_load_1(<8 x i32> inreg %rsrc, <4 x i32> %c) #0 { |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 44 | main_body: |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 45 | %tex = call <4 x float> @llvm.amdgcn.image.load.v4f32.v4i32.v8i32(<4 x i32> %c, <8 x i32> %rsrc, i32 15, i1 false, i1 false, i1 false, i1 false) |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 46 | %elt = extractelement <4 x float> %tex, i32 0 |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 47 | ret float %elt |
| 48 | } |
| 49 | |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 50 | ; GCN-LABEL: {{^}}image_load_f32_v2i32: |
| 51 | ; GCN: image_load {{v[0-9]+}}, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}} dmask:0x1 unorm |
| 52 | ; GCN: s_waitcnt vmcnt(0) |
| 53 | define amdgpu_ps float @image_load_f32_v2i32(<8 x i32> inreg %rsrc, <2 x i32> %c) #0 { |
Changpeng Fang | 8236fe1 | 2016-11-14 18:33:18 +0000 | [diff] [blame] | 54 | main_body: |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 55 | %tex = call float @llvm.amdgcn.image.load.f32.v2i32.v8i32(<2 x i32> %c, <8 x i32> %rsrc, i32 1, i1 false, i1 false, i1 false, i1 false) |
Changpeng Fang | 8236fe1 | 2016-11-14 18:33:18 +0000 | [diff] [blame] | 56 | ret float %tex |
| 57 | } |
| 58 | |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 59 | ; GCN-LABEL: {{^}}image_load_v2f32_v4i32: |
| 60 | ; GCN: image_load {{v\[[0-9]+:[0-9]+\]}}, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}} dmask:0x3 unorm |
| 61 | ; GCN: s_waitcnt vmcnt(0) |
| 62 | define amdgpu_ps <2 x float> @image_load_v2f32_v4i32(<8 x i32> inreg %rsrc, <4 x i32> %c) #0 { |
Changpeng Fang | 8236fe1 | 2016-11-14 18:33:18 +0000 | [diff] [blame] | 63 | main_body: |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 64 | %tex = call <2 x float> @llvm.amdgcn.image.load.v2f32.v4i32.v8i32(<4 x i32> %c, <8 x i32> %rsrc, i32 3, i1 false, i1 false, i1 false, i1 false) |
Changpeng Fang | 8236fe1 | 2016-11-14 18:33:18 +0000 | [diff] [blame] | 65 | ret <2 x float> %tex |
| 66 | } |
| 67 | |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 68 | ; GCN-LABEL: {{^}}image_store_v4i32: |
| 69 | ; GCN: image_store v[0:3], v[4:7], s[0:7] dmask:0xf unorm |
| 70 | define amdgpu_ps void @image_store_v4i32(<8 x i32> inreg %rsrc, <4 x float> %data, <4 x i32> %coords) #0 { |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 71 | main_body: |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 72 | call void @llvm.amdgcn.image.store.v4f32.v4i32.v8i32(<4 x float> %data, <4 x i32> %coords, <8 x i32> %rsrc, i32 15, i1 false, i1 false, i1 false, i1 false) |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 73 | ret void |
| 74 | } |
| 75 | |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 76 | ; GCN-LABEL: {{^}}image_store_v2i32: |
| 77 | ; GCN: image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm |
| 78 | define amdgpu_ps void @image_store_v2i32(<8 x i32> inreg %rsrc, <4 x float> %data, <2 x i32> %coords) #0 { |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 79 | main_body: |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 80 | call void @llvm.amdgcn.image.store.v4f32.v2i32.v8i32(<4 x float> %data, <2 x i32> %coords, <8 x i32> %rsrc, i32 15, i1 false, i1 false, i1 false, i1 false) |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 81 | ret void |
| 82 | } |
| 83 | |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 84 | ; GCN-LABEL: {{^}}image_store_i32: |
| 85 | ; GCN: image_store v[0:3], v4, s[0:7] dmask:0xf unorm |
| 86 | define amdgpu_ps void @image_store_i32(<8 x i32> inreg %rsrc, <4 x float> %data, i32 %coords) #0 { |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 87 | main_body: |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 88 | call void @llvm.amdgcn.image.store.v4f32.i32.v8i32(<4 x float> %data, i32 %coords, <8 x i32> %rsrc, i32 15, i1 false, i1 false, i1 false, i1 false) |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 89 | ret void |
| 90 | } |
| 91 | |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 92 | ; GCN-LABEL: {{^}}image_store_f32_i32: |
| 93 | ; GCN: image_store {{v[0-9]+}}, {{v[0-9]+}}, {{s\[[0-9]+:[0-9]+\]}} dmask:0x1 unorm |
| 94 | define amdgpu_ps void @image_store_f32_i32(<8 x i32> inreg %rsrc, float %data, i32 %coords) #0 { |
Changpeng Fang | 8236fe1 | 2016-11-14 18:33:18 +0000 | [diff] [blame] | 95 | main_body: |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 96 | call void @llvm.amdgcn.image.store.f32.i32.v8i32(float %data, i32 %coords, <8 x i32> %rsrc, i32 1, i1 false, i1 false, i1 false, i1 false) |
Changpeng Fang | 8236fe1 | 2016-11-14 18:33:18 +0000 | [diff] [blame] | 97 | ret void |
| 98 | } |
| 99 | |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 100 | ; GCN-LABEL: {{^}}image_store_v2f32_v4i32: |
| 101 | ; GCN: image_store {{v\[[0-9]+:[0-9]+\]}}, {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}} dmask:0x3 unorm |
| 102 | define amdgpu_ps void @image_store_v2f32_v4i32(<8 x i32> inreg %rsrc, <2 x float> %data, <4 x i32> %coords) #0 { |
Changpeng Fang | 8236fe1 | 2016-11-14 18:33:18 +0000 | [diff] [blame] | 103 | main_body: |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 104 | call void @llvm.amdgcn.image.store.v2f32.v4i32.v8i32(<2 x float> %data, <4 x i32> %coords, <8 x i32> %rsrc, i32 3, i1 false, i1 false, i1 false, i1 false) |
Changpeng Fang | 8236fe1 | 2016-11-14 18:33:18 +0000 | [diff] [blame] | 105 | ret void |
| 106 | } |
| 107 | |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 108 | ; GCN-LABEL: {{^}}image_store_mip: |
| 109 | ; GCN: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm |
| 110 | define amdgpu_ps void @image_store_mip(<8 x i32> inreg %rsrc, <4 x float> %data, <4 x i32> %coords) #0 { |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 111 | main_body: |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 112 | call void @llvm.amdgcn.image.store.mip.v4f32.v4i32.v8i32(<4 x float> %data, <4 x i32> %coords, <8 x i32> %rsrc, i32 15, i1 false, i1 false, i1 false, i1 false) |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 113 | ret void |
| 114 | } |
| 115 | |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 116 | ; GCN-LABEL: {{^}}getresinfo: |
| 117 | ; GCN: image_get_resinfo {{v\[[0-9]+:[0-9]+\]}}, {{v[0-9]+}}, {{s\[[0-9]+:[0-9]+\]}} dmask:0xf |
| 118 | define amdgpu_ps void @getresinfo() #0 { |
Tom Stellard | fac248c | 2016-10-12 16:35:29 +0000 | [diff] [blame] | 119 | main_body: |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 120 | %r = call <4 x float> @llvm.amdgcn.image.getresinfo.v4f32.i32.v8i32(i32 undef, <8 x i32> undef, i32 15, i1 false, i1 false, i1 false, i1 false) |
Tom Stellard | fac248c | 2016-10-12 16:35:29 +0000 | [diff] [blame] | 121 | %r0 = extractelement <4 x float> %r, i32 0 |
| 122 | %r1 = extractelement <4 x float> %r, i32 1 |
| 123 | %r2 = extractelement <4 x float> %r, i32 2 |
| 124 | %r3 = extractelement <4 x float> %r, i32 3 |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 125 | call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %r0, float %r1, float %r2, float %r3, i1 true, i1 true) #0 |
Tom Stellard | fac248c | 2016-10-12 16:35:29 +0000 | [diff] [blame] | 126 | ret void |
| 127 | } |
| 128 | |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 129 | ; Ideally, the register allocator would avoid the wait here |
| 130 | ; |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 131 | ; GCN-LABEL: {{^}}image_store_wait: |
| 132 | ; GCN: image_store v[0:3], v4, s[0:7] dmask:0xf unorm |
| 133 | ; GCN: s_waitcnt vmcnt(0) expcnt(0) |
| 134 | ; GCN: image_load v[0:3], v4, s[8:15] dmask:0xf unorm |
| 135 | ; GCN: s_waitcnt vmcnt(0) |
| 136 | ; GCN: image_store v[0:3], v4, s[16:23] dmask:0xf unorm |
| 137 | define amdgpu_ps void @image_store_wait(<8 x i32> inreg %arg, <8 x i32> inreg %arg1, <8 x i32> inreg %arg2, <4 x float> %arg3, i32 %arg4) #0 { |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 138 | main_body: |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 139 | call void @llvm.amdgcn.image.store.v4f32.i32.v8i32(<4 x float> %arg3, i32 %arg4, <8 x i32> %arg, i32 15, i1 false, i1 false, i1 false, i1 false) |
| 140 | %data = call <4 x float> @llvm.amdgcn.image.load.v4f32.i32.v8i32(i32 %arg4, <8 x i32> %arg1, i32 15, i1 false, i1 false, i1 false, i1 false) |
| 141 | call void @llvm.amdgcn.image.store.v4f32.i32.v8i32(<4 x float> %data, i32 %arg4, <8 x i32> %arg2, i32 15, i1 false, i1 false, i1 false, i1 false) |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 142 | ret void |
| 143 | } |
| 144 | |
Tom Stellard | 244891d | 2016-12-20 15:52:17 +0000 | [diff] [blame] | 145 | ; SI won't merge ds memory operations, because of the signed offset bug, so |
| 146 | ; we only have check lines for VI. |
| 147 | ; VI-LABEL: image_load_mmo |
| 148 | ; VI: v_mov_b32_e32 [[ZERO:v[0-9]+]], 0 |
| 149 | ; VI: ds_write2_b32 v{{[0-9]+}}, [[ZERO]], [[ZERO]] offset1:4 |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 150 | define amdgpu_ps void @image_load_mmo(float addrspace(3)* %lds, <2 x i32> %c, <8 x i32> inreg %rsrc) #0 { |
| 151 | bb: |
| 152 | store float 0.000000e+00, float addrspace(3)* %lds |
| 153 | %tex = call float @llvm.amdgcn.image.load.f32.v2i32.v8i32(<2 x i32> %c, <8 x i32> %rsrc, i32 15, i1 false, i1 false, i1 false, i1 false) |
Tom Stellard | 244891d | 2016-12-20 15:52:17 +0000 | [diff] [blame] | 154 | %tmp2 = getelementptr float, float addrspace(3)* %lds, i32 4 |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 155 | store float 0.000000e+00, float addrspace(3)* %tmp2 |
| 156 | call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %tex, float %tex, float %tex, float %tex, i1 true, i1 true) #0 |
Tom Stellard | 244891d | 2016-12-20 15:52:17 +0000 | [diff] [blame] | 157 | ret void |
| 158 | } |
Changpeng Fang | 8236fe1 | 2016-11-14 18:33:18 +0000 | [diff] [blame] | 159 | |
| 160 | declare float @llvm.amdgcn.image.load.f32.v2i32.v8i32(<2 x i32>, <8 x i32>, i32, i1, i1, i1, i1) #1 |
| 161 | declare <2 x float> @llvm.amdgcn.image.load.v2f32.v4i32.v8i32(<4 x i32>, <8 x i32>, i32, i1, i1, i1, i1) #1 |
| 162 | declare void @llvm.amdgcn.image.store.f32.i32.v8i32(float, i32, <8 x i32>, i32, i1, i1, i1, i1) #0 |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 163 | |
| 164 | |
Changpeng Fang | 8236fe1 | 2016-11-14 18:33:18 +0000 | [diff] [blame] | 165 | declare void @llvm.amdgcn.image.store.v2f32.v4i32.v8i32(<2 x float>, <4 x i32>, <8 x i32>, i32, i1, i1, i1, i1) #0 |
Tom Stellard | fac248c | 2016-10-12 16:35:29 +0000 | [diff] [blame] | 166 | declare void @llvm.amdgcn.image.store.v4f32.i32.v8i32(<4 x float>, i32, <8 x i32>, i32, i1, i1, i1, i1) #0 |
| 167 | declare void @llvm.amdgcn.image.store.v4f32.v2i32.v8i32(<4 x float>, <2 x i32>, <8 x i32>, i32, i1, i1, i1, i1) #0 |
| 168 | declare void @llvm.amdgcn.image.store.v4f32.v4i32.v8i32(<4 x float>, <4 x i32>, <8 x i32>, i32, i1, i1, i1, i1) #0 |
| 169 | declare void @llvm.amdgcn.image.store.mip.v4f32.v4i32.v8i32(<4 x float>, <4 x i32>, <8 x i32>, i32, i1, i1, i1, i1) #0 |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 170 | |
Tom Stellard | fac248c | 2016-10-12 16:35:29 +0000 | [diff] [blame] | 171 | declare <4 x float> @llvm.amdgcn.image.load.v4f32.i32.v8i32(i32, <8 x i32>, i32, i1, i1, i1, i1) #1 |
| 172 | declare <4 x float> @llvm.amdgcn.image.load.v4f32.v2i32.v8i32(<2 x i32>, <8 x i32>, i32, i1, i1, i1, i1) #1 |
| 173 | declare <4 x float> @llvm.amdgcn.image.load.v4f32.v4i32.v8i32(<4 x i32>, <8 x i32>, i32, i1, i1, i1, i1) #1 |
| 174 | declare <4 x float> @llvm.amdgcn.image.load.mip.v4f32.v4i32.v8i32(<4 x i32>, <8 x i32>, i32, i1, i1, i1, i1) #1 |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 175 | declare <4 x float> @llvm.amdgcn.image.getresinfo.v4f32.i32.v8i32(i32, <8 x i32>, i32, i1, i1, i1, i1) #1 |
Tom Stellard | fac248c | 2016-10-12 16:35:29 +0000 | [diff] [blame] | 176 | |
Matt Arsenault | 3ea0633 | 2017-02-22 00:02:21 +0000 | [diff] [blame] | 177 | declare void @llvm.amdgcn.exp.f32(i32, i32, float, float, float, float, i1, i1) #0 |
Nicolai Haehnle | f2c64db | 2016-02-18 16:44:18 +0000 | [diff] [blame] | 178 | |
Nicolai Haehnle | df3a20c | 2016-04-06 19:40:20 +0000 | [diff] [blame] | 179 | attributes #0 = { nounwind } |
| 180 | attributes #1 = { nounwind readonly } |