diff options
| author | Joerg Sonnenberger <joerg@bec.de> | 2019-10-13 23:00:15 +0000 |
|---|---|---|
| committer | Joerg Sonnenberger <joerg@bec.de> | 2019-10-13 23:00:15 +0000 |
| commit | e4300c392de28b659749d77b415b4903786caa0c (patch) | |
| tree | e2932a42e822bdc97da8cc30e6d80dd87c0518ec /llvm/bindings | |
| parent | 529f4ed401ea9761461fb42b1efa552c320c40fb (diff) | |
| download | bcm5719-llvm-e4300c392de28b659749d77b415b4903786caa0c.tar.gz bcm5719-llvm-e4300c392de28b659749d77b415b4903786caa0c.zip | |
Add a pass to lower is.constant and objectsize intrinsics
This pass lowers is.constant and objectsize intrinsics not simplified by
earlier constant folding, i.e. if the object given is not constant or if
not using the optimized pass chain. The result is recursively simplified
and constant conditionals are pruned, so that dead blocks are removed
even for -O0. This allows inline asm blocks with operand constraints to
work all the time.
The new pass replaces the existing lowering in the codegen-prepare pass
and fallbacks in SDAG/GlobalISEL and FastISel. The latter now assert
on the intrinsics.
Differential Revision: https://reviews.llvm.org/D65280
llvm-svn: 374743
Diffstat (limited to 'llvm/bindings')
| -rw-r--r-- | llvm/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.mli | 5 | ||||
| -rw-r--r-- | llvm/bindings/ocaml/transforms/scalar_opts/scalar_opts_ocaml.c | 6 |
2 files changed, 11 insertions, 0 deletions
diff --git a/llvm/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.mli b/llvm/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.mli index 8970431aeab..117218f0660 100644 --- a/llvm/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.mli +++ b/llvm/bindings/ocaml/transforms/scalar_opts/llvm_scalar_opts.mli @@ -191,6 +191,11 @@ external add_lower_expect_intrinsic : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit = "llvm_add_lower_expect_intrinsic" +(** See the [llvm::createLowerConstantIntrinsicsPass] function. *) +external add_lower_constant_intrinsics + : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit + = "llvm_add_lower_constant_intrinsics" + (** See the [llvm::createTypeBasedAliasAnalysisPass] function. *) external add_type_based_alias_analysis : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit diff --git a/llvm/bindings/ocaml/transforms/scalar_opts/scalar_opts_ocaml.c b/llvm/bindings/ocaml/transforms/scalar_opts/scalar_opts_ocaml.c index 56ebbf3c43c..8d10989bd66 100644 --- a/llvm/bindings/ocaml/transforms/scalar_opts/scalar_opts_ocaml.c +++ b/llvm/bindings/ocaml/transforms/scalar_opts/scalar_opts_ocaml.c @@ -237,6 +237,12 @@ CAMLprim value llvm_add_lower_expect_intrinsic(LLVMPassManagerRef PM) { } /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ +CAMLprim value llvm_add_lower_constant_intrinsics(LLVMPassManagerRef PM) { + LLVMAddLowerConstantIntrinsicsPass(PM); + return Val_unit; +} + +/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ CAMLprim value llvm_add_type_based_alias_analysis(LLVMPassManagerRef PM) { LLVMAddTypeBasedAliasAnalysisPass(PM); return Val_unit; |

