[PATCH] D57504: RFC: Prototype & Roadmap for vector predication in LLVM

Simon Moll via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 29 09:39:00 PDT 2019


simoll updated this revision to Diff 226913.
simoll added a comment.

Updates
-------

- Fixed several intrinsic attributes.
- All fp intrinsics are constrained (identically to the `llvm.contrained.*` ones). They behave like regular fp ops if `fpexcept.ignore` is passed.
- Bitcode verifier test.



Observations
------------

- When using `fpexcept.ignore`, the fp callsites should have the `readnone` attribute set on them to override the `inaccessiblememonly` of the intrinsic declarations. That way DCE still works.
- The rules for constrained fp (`strictfp` on the function definition, only constrained fp in that function) apply only if there is a single fp op with exceptions in the function. That is `strictfp` is not necessary when all fp ops have `fpexcept.ignore`.
- When the exception behavior is not `fpxcept.ignore`, the fp op of the intrinsic is not revealed (`getFunctionalOpcode(..)` returns `Call` in that case).
- (FIXME) `NoCapture` does not work on vectors of pointers.



Next steps
----------

As mentioned earlier, generalized pattern matching will be part of a separate RFC (although its still included in this reference implementation).
I'd like to discuss the actual intrinsic signatures next. For that i will upload a new minimal patch for integer intrinsic support.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D57504/new/

https://reviews.llvm.org/D57504

Files:
  llvm/docs/LangRef.rst
  llvm/docs/Proposals/VectorPredication.rst
  llvm/include/llvm/Analysis/InstructionSimplify.h
  llvm/include/llvm/Bitcode/LLVMBitCodes.h
  llvm/include/llvm/CodeGen/ISDOpcodes.h
  llvm/include/llvm/CodeGen/SelectionDAG.h
  llvm/include/llvm/CodeGen/SelectionDAGNodes.h
  llvm/include/llvm/IR/Attributes.td
  llvm/include/llvm/IR/IRBuilder.h
  llvm/include/llvm/IR/IntrinsicInst.h
  llvm/include/llvm/IR/Intrinsics.td
  llvm/include/llvm/IR/MatcherCast.h
  llvm/include/llvm/IR/PatternMatch.h
  llvm/include/llvm/IR/PredicatedInst.h
  llvm/include/llvm/IR/VPBuilder.h
  llvm/include/llvm/Target/TargetSelectionDAG.td
  llvm/lib/Analysis/InstructionSimplify.cpp
  llvm/lib/AsmParser/LLLexer.cpp
  llvm/lib/AsmParser/LLParser.cpp
  llvm/lib/AsmParser/LLToken.h
  llvm/lib/Bitcode/Reader/BitcodeReader.cpp
  llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
  llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
  llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
  llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h
  llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
  llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
  llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h
  llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
  llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
  llvm/lib/IR/Attributes.cpp
  llvm/lib/IR/CMakeLists.txt
  llvm/lib/IR/IntrinsicInst.cpp
  llvm/lib/IR/PredicatedInst.cpp
  llvm/lib/IR/VPBuilder.cpp
  llvm/lib/IR/Verifier.cpp
  llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
  llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
  llvm/lib/Transforms/InstCombine/InstCombineInternal.h
  llvm/lib/Transforms/Utils/CodeExtractor.cpp
  llvm/test/Bitcode/attributes.ll
  llvm/test/Transforms/InstCombine/vp-fsub.ll
  llvm/test/Transforms/InstSimplify/vp-fsub.ll
  llvm/test/Verifier/evl_attribs.ll
  llvm/test/Verifier/vp-intrinsics.ll
  llvm/unittests/IR/IRBuilderTest.cpp
  llvm/utils/TableGen/CodeGenIntrinsics.h
  llvm/utils/TableGen/CodeGenTarget.cpp
  llvm/utils/TableGen/IntrinsicEmitter.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D57504.226913.patch
Type: text/x-patch
Size: 266664 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191029/4b628b36/attachment-0001.bin>


More information about the llvm-commits mailing list