From 03f160f9d3adfcdc0446c514eee67ad7f79b3c8c Mon Sep 17 00:00:00 2001 From: Justin Holewinski Date: Wed, 23 Jul 2014 18:46:03 +0000 Subject: [PATCH] [NVPTX] mul.wide generation works for any smaller integer source types, not just the next smaller power of two git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213784 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/NVPTX/NVPTXISelLowering.cpp | 4 ++-- test/CodeGen/NVPTX/mulwide.ll | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/lib/Target/NVPTX/NVPTXISelLowering.cpp b/lib/Target/NVPTX/NVPTXISelLowering.cpp index d76b20a29eb..82a0088fe7f 100644 --- a/lib/Target/NVPTX/NVPTXISelLowering.cpp +++ b/lib/Target/NVPTX/NVPTXISelLowering.cpp @@ -4053,13 +4053,13 @@ static bool IsMulWideOperandDemotable(SDValue Op, if (Op.getOpcode() == ISD::SIGN_EXTEND || Op.getOpcode() == ISD::SIGN_EXTEND_INREG) { EVT OrigVT = Op.getOperand(0).getValueType(); - if (OrigVT.getSizeInBits() == OptSize) { + if (OrigVT.getSizeInBits() <= OptSize) { S = Signed; return true; } } else if (Op.getOpcode() == ISD::ZERO_EXTEND) { EVT OrigVT = Op.getOperand(0).getValueType(); - if (OrigVT.getSizeInBits() == OptSize) { + if (OrigVT.getSizeInBits() <= OptSize) { S = Unsigned; return true; } diff --git a/test/CodeGen/NVPTX/mulwide.ll b/test/CodeGen/NVPTX/mulwide.ll index 43bb63098f6..8cfb5c2a7df 100644 --- a/test/CodeGen/NVPTX/mulwide.ll +++ b/test/CodeGen/NVPTX/mulwide.ll @@ -23,6 +23,28 @@ define i32 @mulwideu16(i16 %a, i16 %b) { ret i32 %val2 } +; OPT-LABEL: @mulwide8 +; NOOPT-LABEL: @mulwide8 +define i32 @mulwide8(i8 %a, i8 %b) { +; OPT: mul.wide.s16 +; NOOPT: mul.lo.s32 + %val0 = sext i8 %a to i32 + %val1 = sext i8 %b to i32 + %val2 = mul i32 %val0, %val1 + ret i32 %val2 +} + +; OPT-LABEL: @mulwideu8 +; NOOPT-LABEL: @mulwideu8 +define i32 @mulwideu8(i8 %a, i8 %b) { +; OPT: mul.wide.u16 +; NOOPT: mul.lo.s32 + %val0 = zext i8 %a to i32 + %val1 = zext i8 %b to i32 + %val2 = mul i32 %val0, %val1 + ret i32 %val2 +} + ; OPT-LABEL: @mulwide32 ; NOOPT-LABEL: @mulwide32 define i64 @mulwide32(i32 %a, i32 %b) {