diff options
author | Dmitri Gribenko <gribozavr@gmail.com> | 2019-10-14 12:22:48 +0000 |
---|---|---|
committer | Dmitri Gribenko <gribozavr@gmail.com> | 2019-10-14 12:22:48 +0000 |
commit | 1a21f98ac3c57d027908000b8bac356daec51416 (patch) | |
tree | 9ed8a7cdea6b2580e007cf82401073f4ffff08ba /llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | |
parent | c4d256a59049d4b2f21da83f43b9caba2427885e (diff) | |
download | bcm5719-llvm-1a21f98ac3c57d027908000b8bac356daec51416.tar.gz bcm5719-llvm-1a21f98ac3c57d027908000b8bac356daec51416.zip |
Revert "Add a pass to lower is.constant and objectsize intrinsics"
This reverts commit r374743. It broke the build with Ocaml enabled:
http://lab.llvm.org:8011/builders/clang-x86_64-debian-fast/builds/19218
llvm-svn: 374768
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp index 9a29a010c14..3c36cc6f659 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -6388,11 +6388,29 @@ void SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, DAG.setRoot(Res); return; } - case Intrinsic::objectsize: - llvm_unreachable("llvm.objectsize.* should have been lowered already"); + case Intrinsic::objectsize: { + // If we don't know by now, we're never going to know. + ConstantInt *CI = dyn_cast<ConstantInt>(I.getArgOperand(1)); + + assert(CI && "Non-constant type in __builtin_object_size?"); + + SDValue Arg = getValue(I.getCalledValue()); + EVT Ty = Arg.getValueType(); + + if (CI->isZero()) + Res = DAG.getConstant(-1ULL, sdl, Ty); + else + Res = DAG.getConstant(0, sdl, Ty); + + setValue(&I, Res); + return; + } case Intrinsic::is_constant: - llvm_unreachable("llvm.is.constant.* should have been lowered already"); + // If this wasn't constant-folded away by now, then it's not a + // constant. + setValue(&I, DAG.getConstant(0, sdl, MVT::i1)); + return; case Intrinsic::annotation: case Intrinsic::ptr_annotation: |