[PATCH] D42675: [RISCV] Define getSetCCResultType for setting vector setCC type

Shiva Chen via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 29 18:34:34 PST 2018


shiva0217 created this revision.
shiva0217 added a reviewer: asb.
Herald added subscribers: niosHD, sabuasal, apazos, jordy.potman.lists, simoncook, johnrusso, rbar.

To avoid trigger "No default SetCC type for vectors!" assertion for vector comparison.


Repository:
  rL LLVM

https://reviews.llvm.org/D42675

Files:
  lib/Target/RISCV/RISCVISelLowering.cpp
  lib/Target/RISCV/RISCVISelLowering.h
  test/CodeGen/RISCV/get-setcc-result-type.ll


Index: test/CodeGen/RISCV/get-setcc-result-type.ll
===================================================================
--- /dev/null
+++ test/CodeGen/RISCV/get-setcc-result-type.ll
@@ -0,0 +1,18 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -mtriple=riscv32 -disable-block-placement -verify-machineinstrs < %s \
+; RUN:   | FileCheck -check-prefix=RV32I %s
+
+define void @getSetCCResultType(<4 x i32>* nocapture %p, <4 x i32>* nocapture readnone %q) local_unnamed_addr #0 {
+; RV32I-LABEL: getSetCCResultType:
+; RV32I:       # %bb.0:
+; RV32I: seqz	a1, a1
+; RV32I: seqz	a1, a1
+; RV32I: seqz	a1, a1
+; RV32I: seqz	a1, a1
+entry:
+  %0 = load <4 x i32>, <4 x i32>* %p, align 16
+  %cmp = icmp eq <4 x i32> %0, zeroinitializer
+  %sext = sext <4 x i1> %cmp to <4 x i32>
+  store <4 x i32> %sext, <4 x i32>* %p, align 16
+  ret void
+}
Index: lib/Target/RISCV/RISCVISelLowering.h
===================================================================
--- lib/Target/RISCV/RISCVISelLowering.h
+++ lib/Target/RISCV/RISCVISelLowering.h
@@ -51,6 +51,10 @@
   EmitInstrWithCustomInserter(MachineInstr &MI,
                               MachineBasicBlock *BB) const override;
 
+  /// getSetCCResultType - Return the value type to use for ISD::SETCC.
+  EVT getSetCCResultType(const DataLayout &DL, LLVMContext &Context,
+                         EVT VT) const override;
+
 private:
   void analyzeInputArgs(MachineFunction &MF, CCState &CCInfo,
                         const SmallVectorImpl<ISD::InputArg> &Ins,
Index: lib/Target/RISCV/RISCVISelLowering.cpp
===================================================================
--- lib/Target/RISCV/RISCVISelLowering.cpp
+++ lib/Target/RISCV/RISCVISelLowering.cpp
@@ -116,6 +116,13 @@
   setMinimumJumpTableEntries(INT_MAX);
 }
 
+EVT RISCVTargetLowering::getSetCCResultType(const DataLayout &DL, LLVMContext &,
+                                            EVT VT) const {
+  if (!VT.isVector())
+    return getPointerTy(DL);
+  return VT.changeVectorElementTypeToInteger();
+}
+
 // Changes the condition code and swaps operands if necessary, so the SetCC
 // operation matches one of the comparisons supported directly in the RISC-V
 // ISA.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D42675.131913.patch
Type: text/x-patch
Size: 2234 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180130/34a179bb/attachment.bin>


More information about the llvm-commits mailing list