|
2 | 2 | ; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck %s -check-prefix=GCN |
3 | 3 | ; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 < %s | FileCheck %s -check-prefix=GCN |
4 | 4 |
|
| 5 | +;tests for integer 32 |
| 6 | +define amdgpu_cs void @test_i32_sge(i32 %a, i32 %p, i32 %q, ptr addrspace(1) %out) { |
| 7 | +; GCN-LABEL: test_i32_sge: |
| 8 | +; GCN: ; %bb.0: ; %.entry |
| 9 | +; GCN-NEXT: v_cmp_lt_i32_e32 vcc_lo, 1, v0 |
| 10 | +; GCN-NEXT: v_dual_cndmask_b32 v0, 0, v1 :: v_dual_cndmask_b32 v1, 0, v2 |
| 11 | +; GCN-NEXT: global_store_b64 v[3:4], v[0:1], off |
| 12 | +; GCN-NEXT: s_endpgm |
| 13 | +.entry: |
| 14 | + %vcc = icmp sge i32 %a, 2 |
| 15 | + %val1 = select i1 %vcc, i32 %p, i32 0 |
| 16 | + %val2 = select i1 %vcc, i32 %q, i32 0 |
| 17 | + %ret0 = insertelement <2 x i32> poison, i32 %val1, i32 0 |
| 18 | + %ret1 = insertelement <2 x i32> %ret0, i32 %val2, i32 1 |
| 19 | + store <2 x i32> %ret1, ptr addrspace(1) %out |
| 20 | + ret void |
| 21 | +} |
| 22 | + |
| 23 | +define amdgpu_cs void @test_i32_sle(i32 %a, i32 %p, i32 %q, ptr addrspace(1) %out) { |
| 24 | +; GCN-LABEL: test_i32_sle: |
| 25 | +; GCN: ; %bb.0: ; %.entry |
| 26 | +; GCN-NEXT: v_cmp_gt_i32_e32 vcc_lo, 3, v0 |
| 27 | +; GCN-NEXT: v_dual_cndmask_b32 v0, 0, v1 :: v_dual_cndmask_b32 v1, 0, v2 |
| 28 | +; GCN-NEXT: global_store_b64 v[3:4], v[0:1], off |
| 29 | +; GCN-NEXT: s_endpgm |
| 30 | +.entry: |
| 31 | + %vcc = icmp sle i32 %a, 2 |
| 32 | + %val1 = select i1 %vcc, i32 %p, i32 0 |
| 33 | + %val2 = select i1 %vcc, i32 %q, i32 0 |
| 34 | + %ret0 = insertelement <2 x i32> poison, i32 %val1, i32 0 |
| 35 | + %ret1 = insertelement <2 x i32> %ret0, i32 %val2, i32 1 |
| 36 | + store <2 x i32> %ret1, ptr addrspace(1) %out |
| 37 | + ret void |
| 38 | +} |
| 39 | + |
| 40 | +define amdgpu_cs void @test_i32_sgt(i32 %a, i32 %p, i32 %q, ptr addrspace(1) %out) { |
| 41 | +; GCN-LABEL: test_i32_sgt: |
| 42 | +; GCN: ; %bb.0: ; %.entry |
| 43 | +; GCN-NEXT: v_cmp_le_i32_e32 vcc_lo, 2, v0 |
| 44 | +; GCN-NEXT: v_dual_cndmask_b32 v0, 0, v1 :: v_dual_cndmask_b32 v1, 0, v2 |
| 45 | +; GCN-NEXT: global_store_b64 v[3:4], v[0:1], off |
| 46 | +; GCN-NEXT: s_endpgm |
| 47 | +.entry: |
| 48 | + %vcc = icmp sgt i32 2, %a |
| 49 | + %val1 = select i1 %vcc, i32 0, i32 %p |
| 50 | + %val2 = select i1 %vcc, i32 0, i32 %q |
| 51 | + %ret0 = insertelement <2 x i32> poison, i32 %val1, i32 0 |
| 52 | + %ret1 = insertelement <2 x i32> %ret0, i32 %val2, i32 1 |
| 53 | + store <2 x i32> %ret1, ptr addrspace(1) %out |
| 54 | + ret void |
| 55 | +} |
| 56 | + |
| 57 | +define amdgpu_cs void @test_i32_slt(i32 %a, i32 %p, i32 %q, ptr addrspace(1) %out) { |
| 58 | +; GCN-LABEL: test_i32_slt: |
| 59 | +; GCN: ; %bb.0: ; %.entry |
| 60 | +; GCN-NEXT: v_cmp_ge_i32_e32 vcc_lo, 2, v0 |
| 61 | +; GCN-NEXT: v_dual_cndmask_b32 v0, 0, v1 :: v_dual_cndmask_b32 v1, 0, v2 |
| 62 | +; GCN-NEXT: global_store_b64 v[3:4], v[0:1], off |
| 63 | +; GCN-NEXT: s_endpgm |
| 64 | +.entry: |
| 65 | + %vcc = icmp slt i32 2, %a |
| 66 | + %val1 = select i1 %vcc, i32 0, i32 %p |
| 67 | + %val2 = select i1 %vcc, i32 0, i32 %q |
| 68 | + %ret0 = insertelement <2 x i32> poison, i32 %val1, i32 0 |
| 69 | + %ret1 = insertelement <2 x i32> %ret0, i32 %val2, i32 1 |
| 70 | + store <2 x i32> %ret1, ptr addrspace(1) %out |
| 71 | + ret void |
| 72 | +} |
| 73 | + |
| 74 | +;tests for integer 64 |
| 75 | +define amdgpu_cs void @test_i64_sge(i64 %a, i64 %p, i64 %q, ptr addrspace(1) %out) { |
| 76 | +; GCN-LABEL: test_i64_sge: |
| 77 | +; GCN: ; %bb.0: ; %.entry |
| 78 | +; GCN-NEXT: v_cmp_lt_i64_e32 vcc_lo, 1, v[0:1] |
| 79 | +; GCN-NEXT: v_dual_cndmask_b32 v1, 0, v3 :: v_dual_cndmask_b32 v0, 0, v2 |
| 80 | +; GCN-NEXT: v_dual_cndmask_b32 v3, 0, v5 :: v_dual_cndmask_b32 v2, 0, v4 |
| 81 | +; GCN-NEXT: global_store_b128 v[6:7], v[0:3], off |
| 82 | +; GCN-NEXT: s_endpgm |
| 83 | +.entry: |
| 84 | + %vcc = icmp sge i64 %a, 2 |
| 85 | + %val1 = select i1 %vcc, i64 %p, i64 0 |
| 86 | + %val2 = select i1 %vcc, i64 %q, i64 0 |
| 87 | + %ret0 = insertelement <2 x i64> poison, i64 %val1, i64 0 |
| 88 | + %ret1 = insertelement <2 x i64> %ret0, i64 %val2, i64 1 |
| 89 | + store <2 x i64> %ret1, ptr addrspace(1) %out |
| 90 | + ret void |
| 91 | +} |
| 92 | + |
| 93 | +define amdgpu_cs void @test_i64_sle(i64 %a, i64 %p, i64 %q, ptr addrspace(1) %out) { |
| 94 | +; GCN-LABEL: test_i64_sle: |
| 95 | +; GCN: ; %bb.0: ; %.entry |
| 96 | +; GCN-NEXT: v_cmp_gt_i64_e32 vcc_lo, 3, v[0:1] |
| 97 | +; GCN-NEXT: v_dual_cndmask_b32 v1, 0, v3 :: v_dual_cndmask_b32 v0, 0, v2 |
| 98 | +; GCN-NEXT: v_dual_cndmask_b32 v3, 0, v5 :: v_dual_cndmask_b32 v2, 0, v4 |
| 99 | +; GCN-NEXT: global_store_b128 v[6:7], v[0:3], off |
| 100 | +; GCN-NEXT: s_endpgm |
| 101 | +.entry: |
| 102 | + %vcc = icmp sle i64 %a, 2 |
| 103 | + %val1 = select i1 %vcc, i64 %p, i64 0 |
| 104 | + %val2 = select i1 %vcc, i64 %q, i64 0 |
| 105 | + %ret0 = insertelement <2 x i64> poison, i64 %val1, i64 0 |
| 106 | + %ret1 = insertelement <2 x i64> %ret0, i64 %val2, i64 1 |
| 107 | + store <2 x i64> %ret1, ptr addrspace(1) %out |
| 108 | + ret void |
| 109 | +} |
| 110 | + |
| 111 | +define amdgpu_cs void @test_i64_sgt(i64 %a, i64 %p, i64 %q, ptr addrspace(1) %out) { |
| 112 | +; GCN-LABEL: test_i64_sgt: |
| 113 | +; GCN: ; %bb.0: ; %.entry |
| 114 | +; GCN-NEXT: v_cmp_le_i64_e32 vcc_lo, 2, v[0:1] |
| 115 | +; GCN-NEXT: v_dual_cndmask_b32 v1, 0, v3 :: v_dual_cndmask_b32 v0, 0, v2 |
| 116 | +; GCN-NEXT: v_dual_cndmask_b32 v3, 0, v5 :: v_dual_cndmask_b32 v2, 0, v4 |
| 117 | +; GCN-NEXT: global_store_b128 v[6:7], v[0:3], off |
| 118 | +; GCN-NEXT: s_endpgm |
| 119 | +.entry: |
| 120 | + %vcc = icmp sgt i64 2, %a |
| 121 | + %val1 = select i1 %vcc, i64 0, i64 %p |
| 122 | + %val2 = select i1 %vcc, i64 0, i64 %q |
| 123 | + %ret0 = insertelement <2 x i64> poison, i64 %val1, i64 0 |
| 124 | + %ret1 = insertelement <2 x i64> %ret0, i64 %val2, i64 1 |
| 125 | + store <2 x i64> %ret1, ptr addrspace(1) %out |
| 126 | + ret void |
| 127 | +} |
| 128 | + |
| 129 | +define amdgpu_cs void @test_i64_slt(i64 %a, i64 %p, i64 %q, ptr addrspace(1) %out) { |
| 130 | +; GCN-LABEL: test_i64_slt: |
| 131 | +; GCN: ; %bb.0: ; %.entry |
| 132 | +; GCN-NEXT: v_cmp_ge_i64_e32 vcc_lo, 2, v[0:1] |
| 133 | +; GCN-NEXT: v_dual_cndmask_b32 v1, 0, v3 :: v_dual_cndmask_b32 v0, 0, v2 |
| 134 | +; GCN-NEXT: v_dual_cndmask_b32 v3, 0, v5 :: v_dual_cndmask_b32 v2, 0, v4 |
| 135 | +; GCN-NEXT: global_store_b128 v[6:7], v[0:3], off |
| 136 | +; GCN-NEXT: s_endpgm |
| 137 | +.entry: |
| 138 | + %vcc = icmp slt i64 2, %a |
| 139 | + %val1 = select i1 %vcc, i64 0, i64 %p |
| 140 | + %val2 = select i1 %vcc, i64 0, i64 %q |
| 141 | + %ret0 = insertelement <2 x i64> poison, i64 %val1, i64 0 |
| 142 | + %ret1 = insertelement <2 x i64> %ret0, i64 %val2, i64 1 |
| 143 | + store <2 x i64> %ret1, ptr addrspace(1) %out |
| 144 | + ret void |
| 145 | +} |
| 146 | + |
| 147 | +;tests for unsigned 32 |
5 | 148 | define amdgpu_cs void @test_u32_eq(i32 %a, i32 %p, i32 %q, ptr addrspace(1) %out) { |
6 | 149 | ; GCN-LABEL: test_u32_eq: |
7 | 150 | ; GCN: ; %bb.0: ; %.entry |
@@ -104,6 +247,7 @@ define amdgpu_cs void @test_u32_ult(i32 %a, i32 %p, i32 %q, ptr addrspace(1) %ou |
104 | 247 | ret void |
105 | 248 | } |
106 | 249 |
|
| 250 | +;tests for unsigned 64 |
107 | 251 | define amdgpu_cs void @test_u64_eq(i64 %a, i64 %p, i64 %q, ptr addrspace(1) %out) { |
108 | 252 | ; GCN-LABEL: test_u64_eq: |
109 | 253 | ; GCN: ; %bb.0: ; %.entry |
@@ -212,6 +356,7 @@ define amdgpu_cs void @test_u64_ult(i64 %a, i64 %p, i64 %q, ptr addrspace(1) %ou |
212 | 356 | ret void |
213 | 357 | } |
214 | 358 |
|
| 359 | +;tests for float 32 |
215 | 360 | define amdgpu_cs void @test_f32_oeq(float %a, float %p, float %q, ptr addrspace(1) %out) { |
216 | 361 | ; GCN-LABEL: test_f32_oeq: |
217 | 362 | ; GCN: ; %bb.0: ; %.entry |
@@ -349,6 +494,7 @@ define amdgpu_cs void @test_f32_olt(float %a, float %p, float %q, ptr addrspace( |
349 | 494 | ret void |
350 | 495 | } |
351 | 496 |
|
| 497 | +;tests for float64 |
352 | 498 | define amdgpu_cs void @test_f64_oeq(double %a, double %p, double %q, ptr addrspace(1) %out) { |
353 | 499 | ; GCN-LABEL: test_f64_oeq: |
354 | 500 | ; GCN: ; %bb.0: ; %.entry |
|
0 commit comments