From 6332fdef158802d271c294aeec50e0b4e8095365 Mon Sep 17 00:00:00 2001 From: Justin Holewinski Date: Wed, 22 Jun 2011 02:09:50 +0000 Subject: [PATCH] PTX: Add signed integer comparisons git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133599 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/PTX/PTXInstrInfo.td | 12 ++++++ test/CodeGen/PTX/setp.ll | 72 ++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) diff --git a/lib/Target/PTX/PTXInstrInfo.td b/lib/Target/PTX/PTXInstrInfo.td index d240899c6ad..cc7494412bc 100644 --- a/lib/Target/PTX/PTXInstrInfo.td +++ b/lib/Target/PTX/PTXInstrInfo.td @@ -696,6 +696,10 @@ defm SETPLTu16 : PTX_SETP_I; defm SETPLEu16 : PTX_SETP_I; defm SETPGTu16 : PTX_SETP_I; defm SETPGEu16 : PTX_SETP_I; +defm SETPLTs16 : PTX_SETP_I; +defm SETPLEs16 : PTX_SETP_I; +defm SETPGTs16 : PTX_SETP_I; +defm SETPGEs16 : PTX_SETP_I; // Compare u32 @@ -705,6 +709,10 @@ defm SETPLTu32 : PTX_SETP_I; defm SETPLEu32 : PTX_SETP_I; defm SETPGTu32 : PTX_SETP_I; defm SETPGEu32 : PTX_SETP_I; +defm SETPLTs32 : PTX_SETP_I; +defm SETPLEs32 : PTX_SETP_I; +defm SETPGTs32 : PTX_SETP_I; +defm SETPGEs32 : PTX_SETP_I; // Compare u64 @@ -714,6 +722,10 @@ defm SETPLTu64 : PTX_SETP_I; defm SETPLEu64 : PTX_SETP_I; defm SETPGTu64 : PTX_SETP_I; defm SETPGEu64 : PTX_SETP_I; +defm SETPLTs64 : PTX_SETP_I; +defm SETPLEs64 : PTX_SETP_I; +defm SETPGTs64 : PTX_SETP_I; +defm SETPGEs64 : PTX_SETP_I; // Compare f32 diff --git a/test/CodeGen/PTX/setp.ll b/test/CodeGen/PTX/setp.ll index a5d7484268c..3e01a75a709 100644 --- a/test/CodeGen/PTX/setp.ll +++ b/test/CodeGen/PTX/setp.ll @@ -54,6 +54,42 @@ define ptx_device i32 @test_setp_ge_u32_rr(i32 %x, i32 %y) { ret i32 %z } +define ptx_device i32 @test_setp_lt_s32_rr(i32 %x, i32 %y) { +; CHECK: setp.lt.s32 p0, r1, r2; +; CHECK-NEXT: selp.u32 r0, 1, 0, p0; +; CHECK-NEXT: ret; + %p = icmp slt i32 %x, %y + %z = zext i1 %p to i32 + ret i32 %z +} + +define ptx_device i32 @test_setp_le_s32_rr(i32 %x, i32 %y) { +; CHECK: setp.le.s32 p0, r1, r2; +; CHECK-NEXT: selp.u32 r0, 1, 0, p0; +; CHECK-NEXT: ret; + %p = icmp sle i32 %x, %y + %z = zext i1 %p to i32 + ret i32 %z +} + +define ptx_device i32 @test_setp_gt_s32_rr(i32 %x, i32 %y) { +; CHECK: setp.gt.s32 p0, r1, r2; +; CHECK-NEXT: selp.u32 r0, 1, 0, p0; +; CHECK-NEXT: ret; + %p = icmp sgt i32 %x, %y + %z = zext i1 %p to i32 + ret i32 %z +} + +define ptx_device i32 @test_setp_ge_s32_rr(i32 %x, i32 %y) { +; CHECK: setp.ge.s32 p0, r1, r2; +; CHECK-NEXT: selp.u32 r0, 1, 0, p0; +; CHECK-NEXT: ret; + %p = icmp sge i32 %x, %y + %z = zext i1 %p to i32 + ret i32 %z +} + define ptx_device i32 @test_setp_eq_u32_ri(i32 %x) { ; CHECK: setp.eq.u32 p0, r1, 1; ; CHECK-NEXT: selp.u32 r0, 1, 0, p0; @@ -108,6 +144,42 @@ define ptx_device i32 @test_setp_ge_u32_ri(i32 %x) { ret i32 %z } +define ptx_device i32 @test_setp_lt_s32_ri(i32 %x) { +; CHECK: setp.lt.s32 p0, r1, 1; +; CHECK-NEXT: selp.u32 r0, 1, 0, p0; +; CHECK-NEXT: ret; + %p = icmp slt i32 %x, 1 + %z = zext i1 %p to i32 + ret i32 %z +} + +define ptx_device i32 @test_setp_le_s32_ri(i32 %x) { +; CHECK: setp.lt.s32 p0, r1, 2; +; CHECK-NEXT: selp.u32 r0, 1, 0, p0; +; CHECK-NEXT: ret; + %p = icmp sle i32 %x, 1 + %z = zext i1 %p to i32 + ret i32 %z +} + +define ptx_device i32 @test_setp_gt_s32_ri(i32 %x) { +; CHECK: setp.gt.s32 p0, r1, 1; +; CHECK-NEXT: selp.u32 r0, 1, 0, p0; +; CHECK-NEXT: ret; + %p = icmp sgt i32 %x, 1 + %z = zext i1 %p to i32 + ret i32 %z +} + +define ptx_device i32 @test_setp_ge_s32_ri(i32 %x) { +; CHECK: setp.gt.s32 p0, r1, 0; +; CHECK-NEXT: selp.u32 r0, 1, 0, p0; +; CHECK-NEXT: ret; + %p = icmp sge i32 %x, 1 + %z = zext i1 %p to i32 + ret i32 %z +} + define ptx_device i32 @test_setp_4_op_format_1(i32 %x, i32 %y, i32 %u, i32 %v) { ; CHECK: setp.gt.u32 p0, r3, r4; ; CHECK-NEXT: setp.eq.and.u32 p0, r1, r2, p0; -- 2.34.1