[PATCH] LLVM intrinsic for invariants

hfinkel at anl.gov hfinkel at anl.gov
Sat Jul 12 10:12:38 PDT 2014


This adds the basic invariant intrinsic, noop lowering, and some basic properties:

 - llvm.invariant(undef) and llvm.invariant(true) are dead
 - llvm.invariant(false) is unreachable (this directly corresponds to the documented behavior of MSVC's __assume(0))

The intrinsic is tagged as writing arbitrarily, in order to maintain control dependencies. BasicAA has been updated, however, to return NoModRef for any particular location-based query so that we don't unnecessarily block code motion.

http://reviews.llvm.org/D178

Files:
  docs/LangRef.rst
  include/llvm/IR/Intrinsics.td
  lib/Analysis/BasicAliasAnalysis.cpp
  lib/Analysis/TargetTransformInfo.cpp
  lib/CodeGen/BasicTargetTransformInfo.cpp
  lib/CodeGen/IntrinsicLowering.cpp
  lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
  lib/Transforms/Utils/Local.cpp
  test/Analysis/BasicAA/invariant.ll
  test/CodeGen/Generic/invariant.ll
  test/Transforms/InstSimplify/invariant.ll
  test/Transforms/SimplifyCFG/invariant.ll
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D178.11338.patch
Type: text/x-patch
Size: 10883 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140712/d8781e56/attachment.bin>


More information about the llvm-commits mailing list