diff options
author | Freddy Ye <freddy.ye@intel.com> | 2022-12-01 13:47:25 +0800 |
---|---|---|
committer | Freddy Ye <freddy.ye@intel.com> | 2022-12-01 13:47:43 +0800 |
commit | 89f36dd8f32f85bfaf19dfa2cbb12d6622727bfb (patch) | |
tree | 673469c8bf25a0b2131d6d62489632ad3b264617 /llvm/lib/CodeGen/CMakeLists.txt | |
parent | 416e8c6ad529c57f21f46c6f52ded96d3ed239fb (diff) | |
download | llvm-89f36dd8f32f85bfaf19dfa2cbb12d6622727bfb.zip llvm-89f36dd8f32f85bfaf19dfa2cbb12d6622727bfb.tar.gz llvm-89f36dd8f32f85bfaf19dfa2cbb12d6622727bfb.tar.bz2 |
[X86] Add ExpandLargeFpConvert Pass and enable for X86
As stated in
https://discourse.llvm.org/t/rfc-llc-add-expandlargeintfpconvert-pass-for-fp-int-conversion-of-large-bitint/65528,
this implementation is very similar to ExpandLargeDivRem, which expands
‘fptoui .. to’, ‘fptosi .. to’, ‘uitofp .. to’, ‘sitofp .. to’ instructions
with a bitwidth above a threshold into auto-generated functions. This is
useful for targets like x86_64 that cannot lower fp convertions with more
than 128 bits. The expanded nodes are referring from the IR generated by
`compiler-rt/lib/builtins/floattidf.c`, `compiler-rt/lib/builtins/fixdfti.c`,
and etc.
Corner cases:
1. For fp16: as there is no related builtins added in compliler-rt. So I
mainly utilized the fp32 <-> fp16 lib calls to implement.
2. For fp80: as this pass is soft fp emulation and no fp80 instructions can
help in this problem. I recommend users to deprecate this usage. For now, the
implementation uses fp128 as the temporary conversion type and inserts
fptrunc/ext at top/end of the function.
3. For bf16: as clang FE currently doesn't support bf16 algorithm operations
(convert to int, float, +, -, *, ...), this patch doesn't consider bf16 for
now.
4. For unsigned FPToI: since both default hardware behaviors and libgcc are
ignoring "returns 0 for negative input" spec. This pass follows this old way
to ignore unsigned FPToI. See this example:
https://gcc.godbolt.org/z/bnv3jqW1M
The end-to-end tests are uploaded at https://reviews.llvm.org/D138261
Reviewed By: LuoYuanke, mgehre-amd
Differential Revision: https://reviews.llvm.org/D137241
Diffstat (limited to 'llvm/lib/CodeGen/CMakeLists.txt')
-rw-r--r-- | llvm/lib/CodeGen/CMakeLists.txt | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/CMakeLists.txt b/llvm/lib/CodeGen/CMakeLists.txt index 2289ea5..db3b618 100644 --- a/llvm/lib/CodeGen/CMakeLists.txt +++ b/llvm/lib/CodeGen/CMakeLists.txt @@ -54,6 +54,7 @@ add_llvm_component_library(LLVMCodeGen EHContGuardCatchret.cpp ExecutionDomainFix.cpp ExpandLargeDivRem.cpp + ExpandLargeFpConvert.cpp ExpandMemCmp.cpp ExpandPostRAPseudos.cpp ExpandReductions.cpp |