- 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
-
Eli Friedman authored
Zap unnecessary isIntDivCheap() check. PR11485. No testcase because this doesn't affect any in-tree target. llvm-svn: 146015
-
Jakob Stoklund Olesen authored
llvm-svn: 146004
-
Eli Friedman authored
llvm-svn: 146001
-
Jakob Stoklund Olesen authored
This flag is used when bundling machine instructions. It indicates whether the operand reads a value defined inside or outside its bundle. llvm-svn: 145997
-
Eli Friedman authored
llvm-svn: 145996
-
Jakub Staszak authored
llvm-svn: 145995
-
Jakub Staszak authored
- Remove unused types/fields. - Add some constantness. llvm-svn: 145993
-
- 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
-
Jakob Stoklund Olesen authored
llvm-svn: 145965
-
Sebastian Pop authored
llvm-svn: 145944
-
Sebastian Pop authored
llvm-svn: 145943
-
Evan Cheng authored
llvm-svn: 145903
-
Pete Cooper authored
The new register allocator is much more able to split back up ranges too constrained by register classes. Fixes <rdar://problem/10466609> llvm-svn: 145899
-
Lang Hames authored
llvm-svn: 145897
-
Lang Hames authored
llvm-svn: 145893
-
Jakob Stoklund Olesen authored
This was actually a bit of a mess. TLI.setPrefLoopAlignment was clearly documented as taking log2(bytes) units, but the x86 target would still set a preferred loop alignment of '16'. CodePlacementOpt passed this number on to the basic block, and AsmPrinter interpreted it as bytes. Now both MachineFunction and MachineBasicBlock use logarithmic alignments. Obviously, MachineConstantPool still measures alignments in bytes, so we can emulate the thrill of using as. llvm-svn: 145889
-
- Dec 05, 2011
-
-
Nadav Rotem authored
Add support for vectors of pointers. llvm-svn: 145801
-
- Dec 04, 2011
-
-
Eric Christopher authored
not get there any other way. llvm-svn: 145789
-
Anton Korobeynikov authored
Maybe some targets should use this as well. Patch by Evgeniy Stepanov! llvm-svn: 145781
-
- Dec 03, 2011
-
-
Benjamin Kramer authored
-3% on ARMDissasembler.cpp. llvm-svn: 145773
-
- Dec 02, 2011
-
-
Nick Lewycky authored
change, now you need a TargetOptions object to create a TargetMachine. Clang patch to follow. One small functionality change in PTX. PTX had commented out the machine verifier parts in their copy of printAndVerify. That now calls the version in LLVMTargetMachine. Users of PTX who need verification disabled should rely on not passing the command-line flag to enable it. llvm-svn: 145714
-
Hal Finkel authored
make sure ScheduleDAGInstrs::EmitSchedule does not crash when the first instruction in Sequence is a Noop llvm-svn: 145677
-
- Dec 01, 2011
-
-
Dylan Noblesmith authored
Missing file from r145629. llvm-svn: 145634
-
Anshuman Dasgupta authored
llvm-svn: 145629
-
- Nov 29, 2011
-
-
Chad Rosier authored
attempt. llvm-svn: 145425
-
Daniel Dunbar authored
llvm-svn: 145420
-
Bill Wendling authored
non_lazy_symbol_pointers section (__IMPORT,__pointers). Ignore the 'hidden' part since that will place it in the wrong section. <rdar://problem/10443720> llvm-svn: 145356
-
- Nov 28, 2011
-
-
Eli Friedman authored
Make SelectionDAG::InferPtrAlignment use llvm::ComputeMaskedBits instead of duplicating the logic for globals. Make llvm::ComputeMaskedBits handle GlobalVariables slightly more aggressively, to match what InferPtrAlignment knew how to do. llvm-svn: 145304
-
Evan Cheng authored
Conservatively returns zero when the GV does not specify an alignment nor is it initialized. Previously it returns ABI alignment for type of the GV. However, if the type is a "packed" type, then the under-specified alignments is attached to the load / store instructions. In that case, the alignment of the type cannot be trusted. rdar://10464621 llvm-svn: 145300
-
Evan Cheng authored
than ABI alignment. These are loads / stores from / to "packed" data structures. Their alignments are intentionally under-specified. rdar://10301431 llvm-svn: 145273
-
Chad Rosier authored
llvm-svn: 145267
-
Bill Wendling authored
llvm-svn: 145263
-
- Nov 27, 2011
-
-
Chandler Carruth authored
fallthrough) in cases where we might fail to rotate an exit to an outer loop onto the end of the loop chain. Having *some* rotation, but not performing this rotation, is the primary fix of thep performance regression with -enable-block-placement for Olden/em3d (a whopping 30% regression). Still working on reducing the test case that actually exercises this and the new rotation strategy out of this code, but I want to check if this regresses other test cases first as that may indicate it isn't the correct fix. llvm-svn: 145195
-
Chandler Carruth authored
was centered around the premise of laying out a loop in a chain, and then rotating that chain. This is good for preserving contiguous layout, but bad for actually making sane rotations. In order to keep it safe, I had to essentially make it impossible to rotate deeply nested loops. The information needed to correctly reason about a deeply nested loop is actually available -- *before* we layout the loop. We know the inner loops are already fused into chains, etc. We lose information the moment we actually lay out the loop. The solution was the other alternative for this algorithm I discussed with Benjamin and some others: rather than rotating the loop after-the-fact, try to pick a profitable starting block for the loop's layout, and then use our existing layout logic. I was worried about the complexity of this "pick" step, but it turns out such complexity is needed to handle all the important cases I keep teasing out of benchmarks. This is, I'm afraid, a bit of a work-in-progress. It is still misbehaving on some likely important cases I'm investigating in Olden. It also isn't really tested. I'm going to try to craft some interesting nested-loop test cases, but it's likely to be extremely time consuming and I don't want to go there until I'm sure I'm testing the correct behavior. Sadly I can't come up with a way of getting simple, fine grained test cases for this logic. We need complex loop structures to even trigger much of it. llvm-svn: 145183
-
Chandler Carruth authored
llvm-svn: 145181
-
Chandler Carruth authored
heavily on AnalyzeBranch. That routine doesn't behave as we want given that rotation occurs mid-way through re-ordering the function. Instead merely check that there are not unanalyzable branching constructs present, and then reason about the CFG via successor lists. This actually simplifies my mental model for all of this as well. The concrete result is that we now will rotate more loop chains. I've added a test case from Olden highlighting the effect. There is still a bit more to do here though in order to regain all of the performance in Olden. llvm-svn: 145179
-
Chandler Carruth authored
pass. This is designed to achieve one of the important optimizations that the old code placement pass did, but more simply. This is a somewhat rough and *very* conservative version of the transform. We could get a lot fancier here if there are profitable cases to do so. In particular, this only looks for a single pattern, it insists that the loop backedge being rotated away is the last backedge in the chain, and it doesn't provide any means of doing better in-loop placement due to the rotation. However, it appears that it will handle the important loops I am finding in the LLVM test suite. llvm-svn: 145158
-
Benjamin Kramer authored
llvm-svn: 145154
-
- Nov 24, 2011
-
-
Chandler Carruth authored
need lots of fanciness around retaining a reference to a Chain's slot in the BlockToChain map, but that's all gone now. We can just go directly to allocating the new chain (which will update the mapping for us) and using it. Somewhat gross mechanically generated test case replicates the issue Duncan spotted when actually testing this out. llvm-svn: 145120
-