diff options
| author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2014-11-13 23:03:09 +0000 |
|---|---|---|
| committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2014-11-13 23:03:09 +0000 |
| commit | da59f3de450d31b8bc9f21e217d45f6f9ceeadd7 (patch) | |
| tree | ffecbc236f7fcd129584c8d128c7e28f97e54c98 /llvm/test | |
| parent | 971c3ea67b7ba140a5d7634111fd1063d86d2cdd (diff) | |
| download | bcm5719-llvm-da59f3de450d31b8bc9f21e217d45f6f9ceeadd7.tar.gz bcm5719-llvm-da59f3de450d31b8bc9f21e217d45f6f9ceeadd7.zip | |
R600/SI: Fix fmin_legacy / fmax_legacy matching for SI
select_cc is expanded on SI, so this was never matched.
llvm-svn: 221941
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/CodeGen/R600/fcmp64.ll | 42 | ||||
| -rw-r--r-- | llvm/test/CodeGen/R600/fmax_legacy.ll | 42 | ||||
| -rw-r--r-- | llvm/test/CodeGen/R600/fmin_legacy.ll | 51 |
3 files changed, 111 insertions, 24 deletions
diff --git a/llvm/test/CodeGen/R600/fcmp64.ll b/llvm/test/CodeGen/R600/fcmp64.ll index 3cf4a3b6889..dc24443504d 100644 --- a/llvm/test/CodeGen/R600/fcmp64.ll +++ b/llvm/test/CodeGen/R600/fcmp64.ll @@ -1,60 +1,55 @@ ; RUN: llc < %s -march=r600 -mcpu=tahiti -verify-machineinstrs | FileCheck %s -; CHECK: {{^}}flt_f64: +; CHECK-LABEL: {{^}}flt_f64: ; CHECK: v_cmp_lt_f64_e64 {{s[[0-9]+:[0-9]+], v[[0-9]+:[0-9]+], v[[0-9]+:[0-9]+]}} - -define void @flt_f64(double addrspace(1)* %out, double addrspace(1)* %in1, +define void @flt_f64(i32 addrspace(1)* %out, double addrspace(1)* %in1, double addrspace(1)* %in2) { %r0 = load double addrspace(1)* %in1 %r1 = load double addrspace(1)* %in2 %r2 = fcmp ult double %r0, %r1 - %r3 = select i1 %r2, double %r0, double %r1 - store double %r3, double addrspace(1)* %out + %r3 = zext i1 %r2 to i32 + store i32 %r3, i32 addrspace(1)* %out ret void } -; CHECK: {{^}}fle_f64: +; CHECK-LABEL: {{^}}fle_f64: ; CHECK: v_cmp_le_f64_e64 {{s[[0-9]+:[0-9]+], v[[0-9]+:[0-9]+], v[[0-9]+:[0-9]+]}} - -define void @fle_f64(double addrspace(1)* %out, double addrspace(1)* %in1, +define void @fle_f64(i32 addrspace(1)* %out, double addrspace(1)* %in1, double addrspace(1)* %in2) { %r0 = load double addrspace(1)* %in1 %r1 = load double addrspace(1)* %in2 %r2 = fcmp ule double %r0, %r1 - %r3 = select i1 %r2, double %r0, double %r1 - store double %r3, double addrspace(1)* %out + %r3 = zext i1 %r2 to i32 + store i32 %r3, i32 addrspace(1)* %out ret void } -; CHECK: {{^}}fgt_f64: +; CHECK-LABEL: {{^}}fgt_f64: ; CHECK: v_cmp_gt_f64_e64 {{s[[0-9]+:[0-9]+], v[[0-9]+:[0-9]+], v[[0-9]+:[0-9]+]}} - -define void @fgt_f64(double addrspace(1)* %out, double addrspace(1)* %in1, +define void @fgt_f64(i32 addrspace(1)* %out, double addrspace(1)* %in1, double addrspace(1)* %in2) { %r0 = load double addrspace(1)* %in1 %r1 = load double addrspace(1)* %in2 %r2 = fcmp ugt double %r0, %r1 - %r3 = select i1 %r2, double %r0, double %r1 - store double %r3, double addrspace(1)* %out + %r3 = zext i1 %r2 to i32 + store i32 %r3, i32 addrspace(1)* %out ret void } -; CHECK: {{^}}fge_f64: +; CHECK-LABEL: {{^}}fge_f64: ; CHECK: v_cmp_ge_f64_e64 {{s[[0-9]+:[0-9]+], v[[0-9]+:[0-9]+], v[[0-9]+:[0-9]+]}} - -define void @fge_f64(double addrspace(1)* %out, double addrspace(1)* %in1, +define void @fge_f64(i32 addrspace(1)* %out, double addrspace(1)* %in1, double addrspace(1)* %in2) { %r0 = load double addrspace(1)* %in1 %r1 = load double addrspace(1)* %in2 %r2 = fcmp uge double %r0, %r1 - %r3 = select i1 %r2, double %r0, double %r1 - store double %r3, double addrspace(1)* %out + %r3 = zext i1 %r2 to i32 + store i32 %r3, i32 addrspace(1)* %out ret void } -; CHECK: {{^}}fne_f64: +; CHECK-LABEL: {{^}}fne_f64: ; CHECK: v_cmp_neq_f64_e32 vcc, {{v[[0-9]+:[0-9]+], v[[0-9]+:[0-9]+]}} - define void @fne_f64(double addrspace(1)* %out, double addrspace(1)* %in1, double addrspace(1)* %in2) { %r0 = load double addrspace(1)* %in1 @@ -65,9 +60,8 @@ define void @fne_f64(double addrspace(1)* %out, double addrspace(1)* %in1, ret void } -; CHECK: {{^}}feq_f64: +; CHECK-LABEL: {{^}}feq_f64: ; CHECK: v_cmp_eq_f64_e64 {{s[[0-9]+:[0-9]+], v[[0-9]+:[0-9]+], v[[0-9]+:[0-9]+]}} - define void @feq_f64(double addrspace(1)* %out, double addrspace(1)* %in1, double addrspace(1)* %in2) { %r0 = load double addrspace(1)* %in1 diff --git a/llvm/test/CodeGen/R600/fmax_legacy.ll b/llvm/test/CodeGen/R600/fmax_legacy.ll new file mode 100644 index 00000000000..9bfff8a7d80 --- /dev/null +++ b/llvm/test/CodeGen/R600/fmax_legacy.ll @@ -0,0 +1,42 @@ +; RUN: llc -march=r600 -mcpu=SI < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s +; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s + +; FUNC-LABEL: @test_fmax_legacy_uge_f32 +; SI: v_max_legacy_f32_e32 +; EG: MAX +define void @test_fmax_legacy_uge_f32(float addrspace(1)* %out, float %a, float %b) nounwind { + %cmp = fcmp uge float %a, %b + %val = select i1 %cmp, float %a, float %b + store float %val, float addrspace(1)* %out, align 4 + ret void +} + +; FUNC-LABEL: @test_fmax_legacy_oge_f32 +; SI: v_max_legacy_f32_e32 +; EG: MAX +define void @test_fmax_legacy_oge_f32(float addrspace(1)* %out, float %a, float %b) nounwind { + %cmp = fcmp oge float %a, %b + %val = select i1 %cmp, float %a, float %b + store float %val, float addrspace(1)* %out, align 4 + ret void +} + +; FUNC-LABEL: @test_fmax_legacy_ugt_f32 +; SI: v_max_legacy_f32_e32 +; EG: MAX +define void @test_fmax_legacy_ugt_f32(float addrspace(1)* %out, float %a, float %b) nounwind { + %cmp = fcmp ugt float %a, %b + %val = select i1 %cmp, float %a, float %b + store float %val, float addrspace(1)* %out, align 4 + ret void +} + +; FUNC-LABEL: @test_fmax_legacy_ogt_f32 +; SI: v_max_legacy_f32_e32 +; EG: MAX +define void @test_fmax_legacy_ogt_f32(float addrspace(1)* %out, float %a, float %b) nounwind { + %cmp = fcmp ogt float %a, %b + %val = select i1 %cmp, float %a, float %b + store float %val, float addrspace(1)* %out, align 4 + ret void +} diff --git a/llvm/test/CodeGen/R600/fmin_legacy.ll b/llvm/test/CodeGen/R600/fmin_legacy.ll new file mode 100644 index 00000000000..5840e7ed45a --- /dev/null +++ b/llvm/test/CodeGen/R600/fmin_legacy.ll @@ -0,0 +1,51 @@ +; RUN: llc -march=r600 -mcpu=SI < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s +; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s + +; FUNC-LABEL: @test_fmin_legacy_f32 +; EG: MIN * +; SI: v_min_legacy_f32_e32 +define void @test_fmin_legacy_f32(<4 x float> addrspace(1)* %out, <4 x float> inreg %reg0) nounwind { + %r0 = extractelement <4 x float> %reg0, i32 0 + %r1 = extractelement <4 x float> %reg0, i32 1 + %r2 = fcmp uge float %r0, %r1 + %r3 = select i1 %r2, float %r1, float %r0 + %vec = insertelement <4 x float> undef, float %r3, i32 0 + store <4 x float> %vec, <4 x float> addrspace(1)* %out, align 16 + ret void +} + +; FUNC-LABEL: @test_fmin_legacy_ule_f32 +; SI: v_min_legacy_f32_e32 +define void @test_fmin_legacy_ule_f32(float addrspace(1)* %out, float %a, float %b) nounwind { + %cmp = fcmp ule float %a, %b + %val = select i1 %cmp, float %a, float %b + store float %val, float addrspace(1)* %out, align 4 + ret void +} + +; FUNC-LABEL: @test_fmin_legacy_ole_f32 +; SI: v_min_legacy_f32_e32 +define void @test_fmin_legacy_ole_f32(float addrspace(1)* %out, float %a, float %b) nounwind { + %cmp = fcmp ole float %a, %b + %val = select i1 %cmp, float %a, float %b + store float %val, float addrspace(1)* %out, align 4 + ret void +} + +; FUNC-LABEL: @test_fmin_legacy_olt_f32 +; SI: v_min_legacy_f32_e32 +define void @test_fmin_legacy_olt_f32(float addrspace(1)* %out, float %a, float %b) nounwind { + %cmp = fcmp olt float %a, %b + %val = select i1 %cmp, float %a, float %b + store float %val, float addrspace(1)* %out, align 4 + ret void +} + +; FUNC-LABEL: @test_fmin_legacy_ult_f32 +; SI: v_min_legacy_f32_e32 +define void @test_fmin_legacy_ult_f32(float addrspace(1)* %out, float %a, float %b) nounwind { + %cmp = fcmp ult float %a, %b + %val = select i1 %cmp, float %a, float %b + store float %val, float addrspace(1)* %out, align 4 + ret void +} |

