1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-26 04:32:44 +01:00
llvm-mirror/lib
Simon Tatham fb51a50eef [ARM] Make fullfp16 instructions not conditionalisable.
More or less all the instructions defined in the v8.2a full-fp16
extension are defined as UNPREDICTABLE if you put them in an IT block
(Thumb) or use with any condition other than AL (ARM). LLVM didn't
know that, and was happy to conditionalise them.

In order to force these instructions to count as not predicable, I had
to make a small Tablegen change. The code generation back end mostly
decides if an instruction was predicable by looking for something it
can identify as a predicate operand; there's an isPredicable bit flag
that overrides that check in the positive direction, but nothing that
overrides it in the negative direction.

(I considered the alternative approach of actually removing the
predicate operand from those instructions, but thought that it would
be more painful overall for instructions differing only in data type
to have different shapes of operand list. This way, the only code that
has to notice the difference is the if-converter.)

So I've added an isUnpredicable bit alongside isPredicable, and set
that bit on the right subset of FP16 instructions, and also on the
VSEL, VMAXNM/VMINNM and VRINT[ANPM] families which should be
unpredicable for all data types.

I've included a couple of representative regression tests, both of
which previously caused an fp16 instruction to be conditionalised in
ARM state and (with -arm-no-restrict-it) to be put in an IT block in
Thumb.

Reviewers: SjoerdMeijer, t.p.northover, efriedma

Reviewed By: efriedma

Subscribers: jdoerfert, javed.absar, kristof.beyls, hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D57823

llvm-svn: 354768
2019-02-25 10:39:53 +00:00
..
Analysis [NFC] Fix typos: preceeding -> preceding 2019-02-23 01:28:32 +00:00
AsmParser Implementation of asm-goto support in LLVM 2019-02-08 20:48:56 +00:00
BinaryFormat [WebAssembly] clang-tidy (NFC) 2019-02-04 19:13:39 +00:00
Bitcode Implementation of asm-goto support in LLVM 2019-02-08 20:48:56 +00:00
CodeGen [SelectionDAG] Add a OPC_CheckChild2CondCode to SelectionDAGISel to remove a MoveChild and MoveParent pair. 2019-02-25 03:11:44 +00:00
DebugInfo [DebugInfo] Prep llvm-dwarfdump for typed DW5 ops. 2019-02-21 08:20:24 +00:00
Demangle Add missing include (cstdlib) to Demangle.h 2019-01-22 19:18:18 +00:00
ExecutionEngine [opaque pointer types] Pass value type to LoadInst creation. 2019-02-01 20:44:24 +00:00
Fuzzer
FuzzMutate [opaque pointer types] Pass value type to LoadInst creation. 2019-02-01 20:44:24 +00:00
IR [NFC] Fix typos: preceeding -> preceding 2019-02-23 01:28:32 +00:00
IRReader [IRReader] Expose getLazyIRModule 2019-02-11 22:01:13 +00:00
LineEditor Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
Linker Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
LTO [ThinLTO] Detect partially split modules during the thin link 2019-02-14 21:22:50 +00:00
MC Fix "enumeral and non-enumeral type in conditional expression" gcc7 warning. NFCI. 2019-02-24 13:31:52 +00:00
MCA [MCA][Scheduler] Collect resource pressure and memory dependency bottlenecks. 2019-02-20 18:01:49 +00:00
Object objdump fails to parse Mach-O binaries with n_desc bearing stabs 2019-02-23 06:19:56 +00:00
ObjectYAML [yaml2obj][obj2yaml] - Support SHT_GNU_verdef (.gnu.version_d) section. 2019-02-21 12:21:43 +00:00
Option Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
OptRemarks Update more file headers across all of the LLVM projects in the monorepo 2019-01-19 10:56:40 +00:00
Passes [HotColdSplit] Schedule splitting late to fix perf regression 2019-02-15 18:46:44 +00:00
ProfileData [llvm-cov] Add support for gcov --hash-filenames option 2019-02-19 20:45:00 +00:00
Support VFS: Avoid some unnecessary std::string copies 2019-02-23 23:48:47 +00:00
TableGen [TblGen] Extend !if semantics through new feature !cond 2019-01-25 10:25:25 +00:00
Target [ARM] Make fullfp16 instructions not conditionalisable. 2019-02-25 10:39:53 +00:00
Testing Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
TextAPI Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
ToolDrivers [llvm-ar][libObject] Fix relative paths when nesting thin archives. 2019-02-13 23:39:41 +00:00
Transforms [InstCombine] canonicalize add/sub with bool 2019-02-24 16:57:45 +00:00
WindowsManifest Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
XRay Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
CMakeLists.txt [llvm-mca] Move llvm-mca library to llvm/lib/MCA. 2018-12-17 08:08:31 +00:00
LLVMBuild.txt Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00