|
Revision tags: llvmorg-3.4.0-rc2, llvmorg-3.4.0-rc1 |
|
| #
35ec4e35 |
| 25-Sep-2013 |
Richard Sandiford <[email protected]> |
[SystemZ] Add instruction-shortening pass
When loading immediates into a GR32, the port prefered LHI, followed by LLILH or LLILL, followed by IILF. LHI and IILF are natural 32-bit operations, but L
[SystemZ] Add instruction-shortening pass
When loading immediates into a GR32, the port prefered LHI, followed by LLILH or LLILL, followed by IILF. LHI and IILF are natural 32-bit operations, but LLILH and LLILL also clear the upper 32 bits of the register. This was represented as taking a 32-bit subreg of a 64-bit assignment.
Using subregs for something as simple as a move immediate was probably a bad idea. Also, I have patches to add support for the high-word facility, and we don't want something like LLILH and LLILL to stop the high word of the same GPR from being used.
This patch therefore uses LHI and IILF to begin with and adds a late machine-specific pass to use LLILH and LLILL if the other half of the register is not live. The high-word patches extend this behavior to IIHF, LLIHL and LLIHH.
No behavioral change intended.
llvm-svn: 191363
show more ...
|
| #
37cd6cfb |
| 23-Aug-2013 |
Richard Sandiford <[email protected]> |
Turn MipsOptimizeMathLibCalls into a target-independent scalar transform
...so that it can be used for z too. Most of the code is the same. The only real change is to use TargetTransformInfo to tes
Turn MipsOptimizeMathLibCalls into a target-independent scalar transform
...so that it can be used for z too. Most of the code is the same. The only real change is to use TargetTransformInfo to test when a sqrt instruction is available.
The pass is opt-in because at the moment it only handles sqrt.
llvm-svn: 189097
show more ...
|
| #
c212125d |
| 05-Aug-2013 |
Richard Sandiford <[email protected]> |
[SystemZ] Use BRCT and BRCTG to eliminate add-&-compare sequences
This patch just uses a peephole test for "add; compare; branch" sequences within a single block. The IR optimizers already convert
[SystemZ] Use BRCT and BRCTG to eliminate add-&-compare sequences
This patch just uses a peephole test for "add; compare; branch" sequences within a single block. The IR optimizers already convert loops to decrement-and-branch-on-nonzero form in some cases, so even this simplistic test triggers many times during a clang bootstrap and projects/test-suite run. It looks like there are still cases where we need to more strongly prefer branches on nonzero though. E.g. I saw a case where a loop that started out with a check for 0 ended up with a check for -1. I'll try to look at that sometime.
I ended up adding the Reference class because MachineInstr::readsRegister() doesn't check for subregisters (by design, as far as I could tell).
llvm-svn: 187723
show more ...
|
| #
bdbb8af7 |
| 05-Aug-2013 |
Richard Sandiford <[email protected]> |
[SystemZ] Split out comparison elimination into a separate pass
Perhaps predictably, doing comparison elimination on the fly during SystemZLongBranch turned out to be a bad idea. The next patches m
[SystemZ] Split out comparison elimination into a separate pass
Perhaps predictably, doing comparison elimination on the fly during SystemZLongBranch turned out to be a bad idea. The next patches make use of LOAD AND TEST and BRANCH ON COUNT, both of which require changes to earlier instructions.
No functionality change intended.
llvm-svn: 187718
show more ...
|
| #
f2404164 |
| 25-Jul-2013 |
Richard Sandiford <[email protected]> |
[SystemZ] Add LOCR and LOCGR
llvm-svn: 187113
|
|
Revision tags: llvmorg-3.3.1-rc1, llvmorg-3.3.0, llvmorg-3.3.0-rc3, llvmorg-3.3.0-rc2 |
|
| #
312425f3 |
| 20-May-2013 |
Richard Sandiford <[email protected]> |
[SystemZ] Add long branch pass
Before this change, the SystemZ backend would use BRCL for all branches and only consider shortening them to BRC when generating an object file. E.g. a branch on equal
[SystemZ] Add long branch pass
Before this change, the SystemZ backend would use BRCL for all branches and only consider shortening them to BRC when generating an object file. E.g. a branch on equal would use the JGE alias of BRCL in assembly output, but might be shortened to the JE alias of BRC in ELF output. This was a useful first step, but it had two problems:
(1) The z assembler isn't traditionally supposed to perform branch shortening or branch relaxation. We followed this rule by not relaxing branches in assembler input, but that meant that generating assembly code and then assembling it would not produce the same result as going directly to object code; the former would give long branches everywhere, whereas the latter would use short branches where possible.
(2) Other useful branches, like COMPARE AND BRANCH, do not have long forms. We would need to do something else before supporting them.
(Although COMPARE AND BRANCH does not change the condition codes, the plan is to model COMPARE AND BRANCH as a CC-clobbering instruction during codegen, so that we can safely lower it to a separate compare and long branch where necessary. This is not a valid transformation for the assembler proper to make.)
This patch therefore moves branch relaxation to a pre-emit pass. For now, calls are still shortened from BRASL to BRAS by the assembler, although this too is not really the traditional behaviour.
The first test takes about 1.5s to run, and there are likely to be more tests in this vein once further branch types are added. The feeling on IRC was that 1.5s is a bit much for a single test, so I've restricted it to SystemZ hosts for now.
The patch exposes (and fixes) some typos in the main CodeGen/SystemZ tests. A later patch will remove the {{g}}s from that directory.
llvm-svn: 182274
show more ...
|
| #
227144c2 |
| 13-May-2013 |
Rafael Espindola <[email protected]> |
Remove the MachineMove class.
It was just a less powerful and more confusing version of MCCFIInstruction. A side effect is that, since MCCFIInstruction uses dwarf register numbers, calls to getDwarf
Remove the MachineMove class.
It was just a less powerful and more confusing version of MCCFIInstruction. A side effect is that, since MCCFIInstruction uses dwarf register numbers, calls to getDwarfRegNum are pushed out, which should allow further simplifications.
I left the MachineModuleInfo::addFrameMove interface unchanged since this patch was already fairly big.
llvm-svn: 181680
show more ...
|
|
Revision tags: llvmorg-3.3.0-rc1 |
|
| #
5f613dfd |
| 06-May-2013 |
Ulrich Weigand <[email protected]> |
[SystemZ] Add back end
This adds the actual lib/Target/SystemZ target files necessary to implement the SystemZ target. Note that at this point, the target cannot yet be built since the configure bi
[SystemZ] Add back end
This adds the actual lib/Target/SystemZ target files necessary to implement the SystemZ target. Note that at this point, the target cannot yet be built since the configure bits are missing. Those will be provided shortly by a follow-on patch.
This version of the patch incorporates feedback from reviews by Chris Lattner and Anton Korobeynikov. Thanks to all reviewers!
Patch by Richard Sandiford.
llvm-svn: 181203
show more ...
|
|
Revision tags: llvmorg-3.2.0, llvmorg-3.2.0-rc3, llvmorg-3.2.0-rc2, llvmorg-3.2.0-rc1, llvmorg-3.1.0, llvmorg-3.1.0-rc3, llvmorg-3.1.0-rc2, llvmorg-3.1.0-rc1, llvmorg-3.0.0, llvmorg-3.0.0-rc4, llvmorg-3.0.0-rc3, llvmorg-3.0.0-rc2, llvmorg-3.0.0-rc1 |
|
| #
2bb40357 |
| 24-Aug-2011 |
Evan Cheng <[email protected]> |
Move TargetRegistry and TargetSelect from Target to Support where they belong. These are strictly utilities for registering targets and components.
llvm-svn: 138450
|
| #
efd9b424 |
| 20-Jul-2011 |
Evan Cheng <[email protected]> |
- Move CodeModel from a TargetMachine global option to MCCodeGenInfo. - Introduce JITDefault code model. This tells targets to set different default code model for JIT. This eliminates the ugly hac
- Move CodeModel from a TargetMachine global option to MCCodeGenInfo. - Introduce JITDefault code model. This tells targets to set different default code model for JIT. This eliminates the ugly hack in TargetMachine where code model is changed after construction.
llvm-svn: 135580
show more ...
|
| #
2129f596 |
| 19-Jul-2011 |
Evan Cheng <[email protected]> |
Introduce MCCodeGenInfo, which keeps information that can affect codegen (including compilation, assembly). Move relocation model Reloc::Model from TargetMachine to MCCodeGenInfo so it's accessible e
Introduce MCCodeGenInfo, which keeps information that can affect codegen (including compilation, assembly). Move relocation model Reloc::Model from TargetMachine to MCCodeGenInfo so it's accessible even without TargetMachine.
llvm-svn: 135468
show more ...
|
| #
1705ab00 |
| 14-Jul-2011 |
Evan Cheng <[email protected]> |
Rename createAsmInfo to createMCAsmInfo and move registration code to MCTargetDesc to prepare for next round of changes.
llvm-svn: 135219
|
| #
4d1ca96b |
| 08-Jul-2011 |
Evan Cheng <[email protected]> |
Eliminate asm parser's dependency on TargetMachine: - Each target asm parser now creates its own MCSubtatgetInfo (if needed). - Changed AssemblerPredicate to take subtarget features which tablegen us
Eliminate asm parser's dependency on TargetMachine: - Each target asm parser now creates its own MCSubtatgetInfo (if needed). - Changed AssemblerPredicate to take subtarget features which tablegen uses to generate asm matcher subtarget feature queries. e.g. "ModeThumb,FeatureThumb2" is translated to "(Bits & ModeThumb) != 0 && (Bits & FeatureThumb2) != 0".
llvm-svn: 134678
show more ...
|
| #
fe6e405e |
| 30-Jun-2011 |
Evan Cheng <[email protected]> |
Fix the ridiculous SubtargetFeatures API where it implicitly expects CPU name to be the first encoded as the first feature. It then uses the CPU name to look up features / scheduling itineray even th
Fix the ridiculous SubtargetFeatures API where it implicitly expects CPU name to be the first encoded as the first feature. It then uses the CPU name to look up features / scheduling itineray even though clients know full well the CPU name being used to query these properties.
The fix is to just have the clients explictly pass the CPU name!
llvm-svn: 134127
show more ...
|
|
Revision tags: llvmorg-2.9.0, llvmorg-2.9.0-rc3, llvmorg-2.9.0-rc2, llvmorg-2.9.0-rc1 |
|
| #
2f931281 |
| 10-Jan-2011 |
Anton Korobeynikov <[email protected]> |
Rename TargetFrameInfo into TargetFrameLowering. Also, put couple of FIXMEs and fixes here and there.
llvm-svn: 123170
|
| #
f7183edb |
| 15-Nov-2010 |
Anton Korobeynikov <[email protected]> |
First step of huge frame-related refactoring: move emit{Prologue,Epilogue} out of TargetRegisterInfo to TargetFrameInfo, which is definitely much better suitable place
llvm-svn: 119097
|
|
Revision tags: llvmorg-2.8.0, llvmorg-2.8.0-rc3, llvmorg-2.8.0-rc2, llvmorg-2.8.0-rc1, llvmorg-2.8.0-rc0 |
|
| #
bb919dfb |
| 11-May-2010 |
Dan Gohman <[email protected]> |
Implement a bunch more TargetSelectionDAGInfo infrastructure.
Move EmitTargetCodeForMemcpy, EmitTargetCodeForMemset, and EmitTargetCodeForMemmove out of TargetLowering and into SelectionDAGInfo to e
Implement a bunch more TargetSelectionDAGInfo infrastructure.
Move EmitTargetCodeForMemcpy, EmitTargetCodeForMemset, and EmitTargetCodeForMemmove out of TargetLowering and into SelectionDAGInfo to exercise this.
llvm-svn: 103481
show more ...
|
|
Revision tags: llvmorg-2.7.0 |
|
| #
8714348a |
| 07-Nov-2009 |
Chris Lattner <[email protected]> |
indicate what the native integer types for the target are. Please verify.
llvm-svn: 86397
|
|
Revision tags: llvmorg-2.6.0 |
|
| #
7b26fce2 |
| 22-Aug-2009 |
Chris Lattner <[email protected]> |
Rename TargetAsmInfo (and its subclasses) to MCAsmInfo.
llvm-svn: 79763
|
| #
9a6cf912 |
| 12-Aug-2009 |
Chris Lattner <[email protected]> |
Change TargetAsmInfo to be constructed via TargetRegistry from a Target+Triple pair instead of from a virtual method on TargetMachine. This cuts the final ties of TargetAsmInfo to TargetMachine, mea
Change TargetAsmInfo to be constructed via TargetRegistry from a Target+Triple pair instead of from a virtual method on TargetMachine. This cuts the final ties of TargetAsmInfo to TargetMachine, meaning that MC can now use TargetAsmInfo.
llvm-svn: 78802
show more ...
|
| #
2c30970b |
| 11-Aug-2009 |
Chris Lattner <[email protected]> |
pass the TargetTriple down from each target ctor to the LLVMTargetMachine ctor. It is currently unused.
llvm-svn: 78711
|
| #
c3719c36 |
| 02-Aug-2009 |
Daniel Dunbar <[email protected]> |
Move most targets TargetMachine constructor to only taking a target triple. - The C, C++, MSIL, and Mips backends still need the module.
llvm-svn: 77927
|
| #
31b44e8f |
| 02-Aug-2009 |
Daniel Dunbar <[email protected]> |
Normalize Subtarget constructors to take a target triple string instead of Module*.
Also, dropped uses of TargetMachine where unnecessary. The only target which still takes a TargetMachine& is Mips,
Normalize Subtarget constructors to take a target triple string instead of Module*.
Also, dropped uses of TargetMachine where unnecessary. The only target which still takes a TargetMachine& is Mips, I would appreciate it if someone would normalize this to match other targets.
llvm-svn: 77918
show more ...
|
| #
7ee0246f |
| 02-Aug-2009 |
Chris Lattner <[email protected]> |
eliminate the TM argument to the TAI class, remove comment about supporting solaris :)
llvm-svn: 77865
|
| #
5680b4f2 |
| 25-Jul-2009 |
Daniel Dunbar <[email protected]> |
Add new helpers for registering targets. - Less boilerplate == good.
llvm-svn: 77052
|