- Jan 10, 2012
-
-
Evan Cheng authored
llvm-svn: 147884
-
- Dec 22, 2011
-
-
Pete Cooper authored
llvm-svn: 147127
-
Pete Cooper authored
Fixes <rdar://problem/10584116> llvm-svn: 147125
-
- Dec 07, 2011
-
-
Evan Cheng authored
generator to it. For non-bundle instructions, these behave exactly the same as the MC layer API. For properties like mayLoad / mayStore, look into the bundle and if any of the bundled instructions has the property it would return true. For properties like isPredicable, only return true if *all* of the bundled instructions have the property. For properties like canFoldAsLoad, isCompare, conservatively return false for bundles. llvm-svn: 146026
-
- Dec 06, 2011
-
-
Evan Cheng authored
1. Added opcode BUNDLE 2. Taught MachineInstr class to deal with bundled MIs 3. Changed MachineBasicBlock iterator to skip over bundled MIs; added an iterator to walk all the MIs 4. Taught MachineBasicBlock methods about bundled MIs llvm-svn: 145975
-
- Nov 16, 2011
-
-
Owen Anderson authored
llvm-svn: 144747
-
- Oct 26, 2011
-
-
Evan Cheng authored
Disable LICM speculation in high register pressure situation again now that Devang has fixed other issues. llvm-svn: 143003
-
- Oct 20, 2011
-
-
Devang Patel authored
llvm-svn: 142593
-
Devang Patel authored
llvm-svn: 142592
-
- Oct 17, 2011
-
-
-
Devang Patel authored
Radar 10281206. llvm-svn: 142202
-
- Oct 13, 2011
-
-
Nick Lewycky authored
llvm-svn: 141844
-
- Oct 12, 2011
-
-
Evan Cheng authored
Disable machine LICM speculation check (for profitability) until I have time to investigate the regressions. llvm-svn: 141813
-
Bill Wendling authored
containing loop's header to see if that's a landing pad. If it is, then we don't want to hoist instructions out of the loop and above the header. llvm-svn: 141767
-
Evan Cheng authored
1. The speculation check may not have been performed if the BB hasn't had a load LICM candidate. 2. If the candidate would be CSE'ed, then go ahead and speculatively LICM the instruction even if it's in high register pressure situation. llvm-svn: 141747
-
Evan Cheng authored
Also teach MachineLICM to avoid "speculation" when register pressure is high. llvm-svn: 141744
-
Bill Wendling authored
The blocks with invokes have branches to the dispatch block, because that more correctly models the behavior of the CFG. The dispatch of course has edges to the landing pads. Those landing pads could contain invokes, which then have branches back to the dispatch. This creates a loop. The machine LICM pass looks at this loop and thinks it can hoist elements out of it. But because the dispatch is an alternate entry point into the program, the hoisted instructions won't be executed. I wasn't able to get a testcase which was small and could reproduce all of the time. The function_try_block.cpp in llvm-test was where this showed up. llvm-svn: 141726
-
- Oct 11, 2011
-
-
Devang Patel authored
For example, MachineLICM should not hoist a load that is not guaranteed to be executed. Radar 10254254. llvm-svn: 141689
-
Devang Patel authored
llvm-svn: 141594
-
- Oct 10, 2011
-
-
Devang Patel authored
llvm-svn: 141576
-
Devang Patel authored
For example, MachineLICM should not hoist a load that is not guaranteed to be executed. Radar 10254254. llvm-svn: 141569
-
- Sep 01, 2011
-
-
Evan Cheng authored
Teach MachineLICM reg pressure tracking code to deal with MVT::untyped. Sorry, I can't come up with a small test case. rdar://10043690 llvm-svn: 138934
-
- Jun 29, 2011
-
-
Evan Cheng authored
llvm-svn: 134049
-
- Jun 28, 2011
-
-
Evan Cheng authored
sink them into MC layer. - Added MCInstrInfo, which captures the tablegen generated static data. Chang TargetInstrInfo so it's based off MCInstrInfo. llvm-svn: 134021
-
- Jun 27, 2011
-
-
Evan Cheng authored
llvm-svn: 133944
-
- Apr 11, 2011
-
-
Evan Cheng authored
Look pass copies when determining whether hoisting would end up inserting more copies. rdar://9266679 llvm-svn: 129297
-
- Mar 07, 2011
-
-
Cameron Zwarich authored
llvm-svn: 127175
-
- Jan 20, 2011
-
-
Evan Cheng authored
TargetInstrInfo: Change produceSameValue() to take MachineRegisterInfo as an optional argument. When in SSA form, targets can use it to make more aggressive equality analysis. Machine LICM: 1. Eliminate isLoadFromConstantMemory, use MI.isInvariantLoad instead. 2. Fix a bug which prevent CSE of instructions which are not re-materializable. 3. Use improved form of produceSameValue. ARM: 1. Teach ARM produceSameValue to look pass some PIC labels. 2. Look for operands from different loads of different constant pool entries which have same values. 3. Re-implement PIC GA materialization using movw + movt. Combine the pair with a "add pc" or "ldr [pc]" to form pseudo instructions. This makes it possible to re-materialize the instruction, allow machine LICM to hoist the set of instructions out of the loop and make it possible to CSE them. It's a bit hacky, but it significantly improve code quality. 4. Some minor bug fixes as well. With the fixes, using movw + movt to materialize GAs significantly outperform the load from constantpool method. 186.crafty and 255.vortex improved > 20%, 254.gap and 176.gcc ~10%. llvm-svn: 123905
-
- Jan 10, 2011
-
-
Jakob Stoklund Olesen authored
These functions not longer assert when passed 0, but simply return false instead. No functional change intended. llvm-svn: 123155
-
- Nov 11, 2010
-
-
Dan Gohman authored
llvm-svn: 118803
-
- Nov 02, 2010
-
-
Jakob Stoklund Olesen authored
edges on demand. llvm-svn: 117982
-
- Oct 26, 2010
-
-
Evan Cheng authored
llvm-svn: 117348
-
- Oct 21, 2010
-
-
Evan Cheng authored
- Initial register pressure in the loop should be all the live defs into the loop. Not just those from loop preheader which is often empty. - When an instruction is hoisted, update register pressure from loop preheader to the original BB. - Treat only use of a virtual register as kill since the code is still SSA. llvm-svn: 116956
-
- Oct 20, 2010
-
-
Dan Gohman authored
llvm-svn: 116890
-
- Oct 19, 2010
-
-
Evan Cheng authored
erased the instruction during LICM so UpdateRegPressureAfter() should not reference it afterwards. llvm-svn: 116845
-
Owen Anderson authored
Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which must be called in the pass's constructor. This function uses static dependency declarations to recursively initialize the pass's dependencies. Clients that only create passes through the createFooPass() APIs will require no changes. Clients that want to use the CommandLine options for passes will need to manually call the appropriate initialization functions in PassInitialization.h before parsing commandline arguments. I have tested this with all standard configurations of clang and llvm-gcc on Darwin. It is possible that there are problems with the static dependencies that will only be visible with non-standard options. If you encounter any crash in pass registration/creation, please send the testcase to me directly. llvm-svn: 116820
-
Daniel Dunbar authored
is", which breaks some nightly tests. llvm-svn: 116816
-
Andrew Trick authored
in MultiSource/Benchmarks/VersaBench/beamformer/beamformer. SmallSet.insert returns true if the element is inserted. llvm-svn: 116790
-
Evan Cheng authored
"long latency" enough to hoist even if it may increase spilling. Reloading a value from spill slot is often cheaper than performing an expensive computation in the loop. For X86, that means machine LICM will hoist SQRT, DIV, etc. ARM will be somewhat aggressive with VFP and NEON instructions. - Enable register pressure aware machine LICM by default. llvm-svn: 116781
-
- Oct 16, 2010
-
-
Evan Cheng authored
More machine LICM work. It now tracks register pressure for path from preheader to current BB and use the information determine whether hoisting is worthwhile. llvm-svn: 116654
-