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 &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. 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 +}