Commit Graph

39 Commits

Author SHA1 Message Date
Tim Northover
d6e3a6564c GlobalISel: translate "unreachable" (into nothing)
Easiest instruction ever!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@277225 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-29 22:41:55 +00:00
Tim Northover
0f15518dae GlobalISel: support translation of intrinsic calls.
These come in two variants for now: G_INTRINSIC and G_INTRINSIC_W_SIDE_EFFECTS.
We may decide to split the latter up with finer-grained restrictions later, if
necessary.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@277224 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-29 22:32:36 +00:00
Tim Northover
bbdb447778 GlobalISel: make translate* functions take the most specialized class possible.
NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@277188 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-29 18:11:21 +00:00
Tim Northover
57c3cc8560 GlobalISel: add generic conditional branch.
Just the basic equivalent to DAG's condbr for now, we'll get to things like
br_cc when we start doing more legalization.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@277184 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-29 17:58:00 +00:00
Tim Northover
0c332fd272 CodeGen: improve MachineInstrBuilder & MachineIRBuilder interface
For MachineInstrBuilder, having to manually use RegState::Define is ugly and
makes register definitions clunkier than they need to be, so this adds two
convenience functions: addDef and addUse.

For MachineIRBuilder, we want to avoid BuildMI's first-reg-is-def rule because
it's hidden away and causes bugs. So this patch switches buildInstr to
returning a MachineInstrBuilder and adding *all* operands via addDef/addUse.

NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@277176 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-29 17:43:52 +00:00
Ahmed Bougacha
d8a8826830 [GlobalISel] Add G_XOR.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@277172 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-29 16:56:20 +00:00
Matthias Braun
681961f231 Missed updating a GlobalISel bit in my last commit
GlobalISel isn't built by default so I missed it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@277030 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-28 20:13:42 +00:00
Tim Northover
331274dbc8 GlobalISel: support zero-sized allocas
All allocas must be at least 1 byte at the MachineIR level so we allocate just
one byte.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@276897 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-27 17:47:54 +00:00
Tim Northover
2deff156d0 GlobalISel: add generic load and store instructions.
Pretty straightforward, the only oddity is the MachineMemOperand (which it's
surprisingly difficult to share code for).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@276799 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-26 20:23:26 +00:00
Tim Northover
27d9a7f410 GlobalISel: add specialized buildCopy function to MachineInstrBuilder.
NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@276763 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-26 16:45:30 +00:00
Tim Northover
1123323be2 GlobalISel: give MachineInstrBuilder a uniform interface. NFC.
Instead of an ad-hoc collection of "buildInstr" functions with varying numbers
of registers, this uses variadic templates to provide for as many regs as
needed!

Also make IRtranslator use new "buildBr" function instead of some weird generic
one that no-one else would really use.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@276762 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-26 16:45:26 +00:00
Tim Northover
6ba60326a1 GlobalISel: remove redundant ';'s. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@276723 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-26 03:29:18 +00:00
Tim Northover
967b5082a2 GlobalISel: add generic casts to IRTranslator
This adds LLVM's 3 main cast instructions (inttoptr, ptrtoint, bitcast) to the
IRTranslator. The first two are direct translations (with 2 MachineInstr types
each). Since LLT discards information, a bitcast might become trivial and we
emit a COPY in those cases instead.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@276690 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-25 21:01:29 +00:00
Tim Northover
04e7d3ce19 GlobalISel: implement alloca instruction
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@276433 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-22 16:59:52 +00:00
Quentin Colombet
9abf24c5c4 [IRTranslator] Add G_SUB opcode.
This commit adds a generic SUB opcode to global-isel.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@276308 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-21 17:26:50 +00:00
Quentin Colombet
368a8a2f01 [IRTranslator] Add comments to explain the ordering of the switch. NFC.
Group arithmetic operations, bitwise operations, and branch operations.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@276305 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-21 17:26:41 +00:00
Quentin Colombet
513679d9f5 [IRTranslator] Add G_AND opcode.
This commit adds a generic AND opcode to global-isel.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@276297 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-21 15:50:42 +00:00
Tim Northover
4951996d06 GlobalISel: implement low-level type with just size & vector lanes.
This should be all the low-level instruction selection needs to determine how
to implement an operation, with the remaining context taken from the opcode
(e.g. G_ADD vs G_FADD) or other flags not based on type (e.g. fast-math).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@276158 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-20 19:09:30 +00:00
Tim Northover
5ae8ffe436 GlobalISel: freeze reserved regs after IRTranslator.
We can freeze the registers after the MachineFrameInfo has been configured (by
telling it about calls, inline asm, ...). This doesn't happen at all yet, but
will be part of IR translation.

Fixes -verify-machineinstrs assertion.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275221 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-12 22:23:42 +00:00
Quentin Colombet
5b7abef816 [IRTranslator] Support the translation of or.
Now or instructions get translated into G_OR.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272433 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-10 20:50:35 +00:00
Quentin Colombet
d4ca59cf4e [IRTranslator] Refactor to expose a translateBinaryOp method.
This method will be used for every binary operation.

NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272431 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-10 20:50:18 +00:00
Tom Stellard
b4b70a0f72 [GlobalISel] Coding style and whitespace fixes
Reviewers: qcolombet

Subscribers: joker.eph, llvm-commits, vkalintiris

Differential Revision: http://reviews.llvm.org/D19119

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@266342 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-14 17:23:33 +00:00
Quentin Colombet
36053724e3 [IRTranslator] Translate unconditional branches.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@263265 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-11 17:28:03 +00:00
Quentin Colombet
acd8367766 [IRTranslator] Update getOrCreateVReg API to use references.
A value that we want to keep in a virtual register cannot be null.
Reflect that in the API.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@263263 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-11 17:27:54 +00:00
Quentin Colombet
743ea3e236 [MachineIRBuilder] Rename the setter of MF for consistency with the getter.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@263262 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-11 17:27:51 +00:00
Quentin Colombet
b62ecc87ce [MachineIRBuilder] Rename the setter for MBB for consistency with the getter.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@263261 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-11 17:27:47 +00:00
Quentin Colombet
3cf9237ecf [IRTranslator] Update getOrCreateBB API to use references.
A null basic block is invalid, so just pass a reference.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@263260 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-11 17:27:43 +00:00
Quentin Colombet
1f00e2d8f3 [GlobalISel] Introduce initializer method to support start/stop-after features.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@262896 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-08 01:38:55 +00:00
Quentin Colombet
0dca440c42 [GlobalISel] Re-apply r260922-260923 with MSVC-friendly code.
Original message:
Get rid of the ifdefs in TargetLowering.
Introduce a new API used only by GlobalISel: CallLowering.
This API will contain target hooks dedicated to call lowering.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260998 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-16 19:26:02 +00:00
Aaron Ballman
4d9522f889 Reverting r260922-260923; they cause link failures with MSVC.
http://lab.llvm.org:8011/builders/lldb-x86-windows-msvc2015/builds/15436/steps/build/logs/stdio
http://bb.pgr.jp/builders/msbuild-llvmclang-x64-msc18-DA/builds/961/steps/build_llvm/logs/stdio

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260972 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-16 15:29:06 +00:00
Quentin Colombet
30880b6d80 [GlobalISel] Get rid of the ifdefs in TargetLowering.
Introduce a new API used only by GlobalISel: CallLowering.
This API will contain target hooks dedicated to call lowering.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260922 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-16 00:57:44 +00:00
Quentin Colombet
08e5258565 [IRTranslator] Use a single virtual register to represent any Value.
PR26161.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260602 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-11 21:48:32 +00:00
Quentin Colombet
0cd715129e [GlobalISel] Add the necessary plumbing to lower formal arguments.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260579 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-11 19:59:41 +00:00
Quentin Colombet
ad5520eac9 [GlobalISel] Teach the IRTranslator how to lower returns.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260562 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-11 18:53:28 +00:00
Quentin Colombet
fa09f54ecd [GlobalISel][IRTranslator] Change the ownership of the MIRBuilder field.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260551 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-11 17:53:23 +00:00
Quentin Colombet
c778da675d [GlobalISel][IRTranslator] Fix a typo in assert.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260550 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-11 17:52:28 +00:00
Quentin Colombet
bbbe03f0d3 [GlobalISel][IRTranslator] Teach the pass how to translate Add instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260549 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-11 17:51:31 +00:00
Quentin Colombet
f62b31051b [GlobalISel] More detailed skeleton for the IRTranslator.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260456 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-10 22:59:27 +00:00
Quentin Colombet
28bae91c01 [GlobalISel] Add the proper cmake plumbing.
This patch adds the necessary plumbing to cmake to build the sources related to
GlobalISel.

To build the sources related to GlobalISel, we need to add -DBUILD_GLOBAL_ISEL=ON.
By default, this is OFF, thus GlobalISel sources will not impact people that do
not explicitly opt-in.

Differential Revision: http://reviews.llvm.org/D15983


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@258344 91177308-0d34-0410-b5e6-96231b3b80d8
2016-01-20 20:58:56 +00:00