The goal is support tail and mask policy in RVV builtins.
We focus on IR part first.
If the passthru is undef, we use tail agnostic, otherwise
use tail undisturbed.
Co-Authored-by: Hsiangkai Wang <Hsiangkai@gmail.com>
Paths
| Differential D117647
[RISCV] Add passthru operand for RVV nomask load intrinsics. ClosedPublic Authored by khchen on Jan 19 2022, 1:30 AM.
Details Summary The goal is support tail and mask policy in RVV builtins. Co-Authored-by: Hsiangkai Wang <Hsiangkai@gmail.com>
Diff Detail
Event TimelineHerald added subscribers: VincentWu, luke957, achieveartificialintelligence and 25 others. · View Herald TranscriptJan 19 2022, 1:30 AM Herald added projects: Restricted Project, Restricted Project. · View Herald TranscriptJan 19 2022, 1:30 AM
Comment Actions Is "destination operand" the terminology we want? I'd have thought "passthru" was more conventional.
Comment Actions address frasercrmck's comments. Comment Actions Thanks, LGTM. As a heads up, I've pinched the use of _TU as a suffix in D117561. The conflicts should be minor (one location) for whichever patch is merged second. khchen retitled this revision from [RISCV] Add destination operand for RVV nomask load intrinsics. to [RISCV] Add passthru operand for RVV nomask load intrinsics..Jan 21 2022, 8:01 AM This revision is now accepted and ready to land.Jan 25 2022, 8:43 AM This revision was landed with ongoing or failed builds.Jan 25 2022, 5:36 PM Closed by commit rG9273378b8576: [RISCV] Add the passthru operand for RVV nomask load intrinsics. (authored by khchen). · Explain Why This revision was automatically updated to reflect the committed changes.
Revision Contents
Diff 401131 clang/include/clang/Basic/riscv_vector.td
clang/test/CodeGen/RISCV/rvv-intrinsics-overloaded/vloxei.c
clang/test/CodeGen/RISCV/rvv-intrinsics-overloaded/vluxei.c
clang/test/CodeGen/RISCV/rvv-intrinsics/vle.c
clang/test/CodeGen/RISCV/rvv-intrinsics/vleff.c
clang/test/CodeGen/RISCV/rvv-intrinsics/vloxei.c
clang/test/CodeGen/RISCV/rvv-intrinsics/vlse.c
clang/test/CodeGen/RISCV/rvv-intrinsics/vluxei.c
llvm/include/llvm/IR/IntrinsicsRISCV.td
llvm/lib/Target/RISCV/RISCVISelDAGToDAG.h
llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
llvm/lib/Target/RISCV/RISCVISelLowering.cpp
llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td
llvm/test/CodeGen/RISCV/rvv/rv32-vsetvli-intrinsics.ll
llvm/test/CodeGen/RISCV/rvv/rv64-vsetvli-intrinsics.ll
llvm/test/CodeGen/RISCV/rvv/rvv-out-arguments.ll
llvm/test/CodeGen/RISCV/rvv/unmasked-tu-rv32.ll
llvm/test/CodeGen/RISCV/rvv/unmasked-tu-rv64.ll
llvm/test/CodeGen/RISCV/rvv/vle-rv32.ll
llvm/test/CodeGen/RISCV/rvv/vle-rv64.ll
llvm/test/CodeGen/RISCV/rvv/vleff-rv32.ll
llvm/test/CodeGen/RISCV/rvv/vleff-rv64.ll
llvm/test/CodeGen/RISCV/rvv/vloxei-rv32.ll
llvm/test/CodeGen/RISCV/rvv/vloxei-rv64.ll
llvm/test/CodeGen/RISCV/rvv/vlse-rv32.ll
llvm/test/CodeGen/RISCV/rvv/vlse-rv64.ll
llvm/test/CodeGen/RISCV/rvv/vluxei-rv32.ll
llvm/test/CodeGen/RISCV/rvv/vluxei-rv64.ll
llvm/test/CodeGen/RISCV/rvv/vsetvli-insert-crossbb.ll
llvm/test/CodeGen/RISCV/rvv/vsetvli-insert-crossbb.mir
llvm/test/CodeGen/RISCV/rvv/vsetvli-insert.ll
llvm/test/CodeGen/RISCV/rvv/vsetvli-insert.mir
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
If I'm reading this right, isn't it possible that we could have a masked/tu intrinsic, so push back the passthru operand, increment CurOp then check whether the pointer operand is Undef, then wrongly increment CurOp a second time? So basically an undef base pointer has the potential to (presumably) crash the compiler somewhere later?
Don't we unconditionally want to increment CurOp (a single time) since we now always have a passthru operand that we want to skip over?