1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 19:23:23 +01:00
llvm-mirror/utils
Matt Arsenault 6df65c514b GlobalISel: Don't materialize immarg arguments to intrinsics
Encode them directly as an imm argument to G_INTRINSIC*.

Since now intrinsics can now define what parameters are required to be
immediates, avoid using registers for them. Intrinsics could
potentially want a constant that isn't a legal register type. Also,
since G_CONSTANT is subject to CSE and legalization, transforms could
potentially obscure the value (and create extra work for the
selector). The register bank of a G_CONSTANT is also meaningful, so
this could throw off future folding and legalization logic for AMDGPU.

This will be much more convenient to work with than needing to call
getConstantVRegVal and checking if it may have failed for every
constant intrinsic parameter. AMDGPU has quite a lot of intrinsics wth
immarg operands, many of which need inspection during lowering. Having
to find the value in a register is going to add a lot of boilerplate
and waste compile time.

SelectionDAG has always provided TargetConstant for constants which
should not be legalized or materialized in a register. The distinction
between Constant and TargetConstant was somewhat fuzzy, and there was
no automatic way to force usage of TargetConstant for certain
intrinsic parameters. They were both ultimately ConstantSDNode, and it
was inconsistently used. It was quite easy to mis-select an
instruction requiring an immediate. For SelectionDAG, start emitting
TargetConstant for these arguments, and using timm to match them.

Most of the work here is to cleanup target handling of constants. Some
targets process intrinsics through intermediate custom nodes, which
need to preserve TargetConstant usage to match the intrinsic
expectation. Pattern inputs now need to distinguish whether a constant
is merely compatible with an operand or whether it is mandatory.

The GlobalISelEmitter needs to treat timm as a special case of a leaf
node, simlar to MachineBasicBlock operands. This should also enable
handling of patterns for some G_* instructions with immediates, like
G_FENCE or G_EXTRACT.

This does include a workaround for a crash in GlobalISelEmitter when
ARM tries to uses "imm" in an output with a "timm" pattern source.

llvm-svn: 372285
2019-09-19 01:33:14 +00:00
..
benchmark [benchmark] Fix win32 link on case-sensitive fs 2019-07-30 20:47:59 +00:00
bugpoint
count
crosstool
docker
emacs ARM MTE stack sanitizer. 2019-07-15 20:02:23 +00:00
FileCheck [FileCheck] Document FILECHECK_OPTS in -help 2019-08-14 02:56:20 +00:00
fpcmp
gdb-scripts
git-svn [git-llvm] Do not reinvent @{upstream} (take 2) 2019-09-17 04:44:13 +00:00
gn gn build: Merge r372282 2019-09-19 01:03:39 +00:00
jedit
kate
KillTheDoctor
lint
lit Revert r372035: "[lit] Make internal diff work in pipelines" 2019-09-16 23:47:46 +00:00
llvm-build Write the RequiredLibraries for 'all' in LibraryDependencies.inc in a deterministic order (PR42739) 2019-08-05 13:04:07 +00:00
llvm-lit
LLVMVisualizers Clean up MSVC visualization of LLVM pointer types 2019-06-30 21:54:34 +00:00
Misc
not
PerfectShuffle
release test-release.sh: Don't use chrpath on Solaris 2019-09-12 14:50:32 +00:00
Reviewing
sanitizers
TableGen GlobalISel: Don't materialize immarg arguments to intrinsics 2019-09-19 01:33:14 +00:00
Target/ARM
testgen
textmate
unittest reland [gtest] Fix printing of StringRef and SmallString in assert messages. 2019-08-21 13:56:29 +00:00
UpdateTestChecks [UpdateTestChecks] Update tests option 2019-08-07 14:44:50 +00:00
valgrind
vim vim: add immarg keyword 2019-08-30 08:52:55 +00:00
vscode
yaml-bench
abtest.py
add_argument_names.py IR: print value numbers for unnamed function arguments 2019-08-03 14:28:34 +00:00
bisect [Utils][NFC] Copy bisect usage documents from commit msg into script. 2019-08-15 22:07:59 +00:00
bisect-skip-count
bugpoint_gisel_reducer.py
check-each-file
chunk-print-before-all.py [Util] Add a helper script for converting -print-before-all output into a file based equivelent 2019-06-19 22:05:47 +00:00
clang-parse-diagnostics-file
codegen-diff
collect_and_build_with_pgo.py
countloc.sh
create_ladder_graph.py
demangle_tree.py
DSAclean.py
DSAextract.py
extract_symbols.py
extract_vplan.py
findmisopt
findoptdiff
findsym.pl
GenLibDeps.pl [Bitcode] Move Bitstream to a separate library 2019-07-03 22:40:07 +00:00
GetRepositoryPath
GetSourceVersion
getsrcs.sh
indirect_calls.py
lldbDataFormatters.py Add LLDB dataformatters for llvm::StringRef and lldb_private::ConstString 2019-08-16 23:47:57 +00:00
llvm-compilers-check
llvm-gisel-cov.py
llvm-native-gxx
llvm.grm
LLVMBuild.txt
llvmdo
llvmgrep
prepare-code-coverage-artifact.py
schedcover.py
shuffle_fuzz.py
shuffle_select_fuzz_tester.py
sort_includes.py
unicode-case-fold.py
update_analyze_test_checks.py [UpdateTestChecks] Update tests option 2019-08-07 14:44:50 +00:00
update_cc_test_checks.py [UpdateTestChecks] Update tests option 2019-08-07 14:44:50 +00:00
update_llc_test_checks.py [utils] Add minimal support for MIR inputs to update_llc_test_checks.py 2019-09-18 23:44:17 +00:00
update_mca_test_checks.py [UpdateTestChecks] Emit warning when invalid value for -check-prefix(es) option 2019-07-29 17:41:00 +00:00
update_mir_test_checks.py [UpdateTestChecks] Update tests option 2019-08-07 14:44:50 +00:00
update_test_checks.py [UpdateTestChecks] Update tests option 2019-08-07 14:44:50 +00:00
UpdateCMakeLists.pl
wciia.py