| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
Patrik Hägglund, with slightly modified test. Issue reported by Patrik Hägglund on llvmdev.
llvm-svn: 150642
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Call instructions no longer have a list of 43 call-clobbered registers.
Instead, they get a single register mask operand with a bit vector of
call-preserved registers.
This saves a lot of memory, 42 x 32 bytes = 1344 bytes per call
instruction, and it speeds up building call instructions because those
43 imp-def operands no longer need to be added to use-def lists. (And
removed and shifted and re-added for every explicit call operand).
Passes like LiveVariables, LiveIntervals, RAGreedy, PEI, and
BranchFolding are significantly faster because they can deal with call
clobbers in bulk.
Overall, clang -O2 is between 0% and 8% faster, uniformly distributed
depending on call density in the compiled code. Debug builds using
clang -O0 are 0% - 3% faster.
I have verified that this patch doesn't change the assembly generated
for the LLVM nightly test suite when building with -disable-copyprop
and -disable-branch-fold.
Branch folding behaves slightly differently in a few cases because call
instructions have different hash values now.
Copy propagation flushes its data structures when it crosses a register
mask operand. This causes it to leave a few dead copies behind, on the
order of 20 instruction across the entire nightly test suite, including
SPEC. Fixing this properly would require the pass to use different data
structures.
llvm-svn: 150638
|
|
|
|
|
|
|
| |
Don't attempt to move instructions with regmask operands. They are most
likely calls anyway.
llvm-svn: 150634
|
|
|
|
|
|
| |
The existing framework for postra scheduling is library local. We want to keep it that way. Soon we will have a more general MachineScheduler interface. At that time, various bits will be exposed to targets. In the meantime, the VLIWPacketizer wants to use ScheduleDAGInstrs directly, so it needs to wrapped in a PIMPL to avoid exposing it to the target interface.
llvm-svn: 150633
|
|
|
|
| |
llvm-svn: 150632
|
|
|
|
| |
llvm-svn: 150630
|
|
|
|
| |
llvm-svn: 150628
|
|
|
|
| |
llvm-svn: 150627
|
|
|
|
|
|
|
|
|
| |
method. This allows the target lowering code to not have to deal with MDNodes.
Also, avoid leaking memory like a sieve by not creating a global variable for
the image info section, but just emitting the code directly.
llvm-svn: 150624
|
|
|
|
| |
llvm-svn: 150623
|
|
|
|
|
|
|
|
| |
Accomplished by moving the body of StringRef::edit_distance into
a separate function that accepts two ArrayRefs, and making
StringRef::edit_distance a wrapper around the new function.
llvm-svn: 150621
|
|
|
|
| |
llvm-svn: 150619
|
|
|
|
| |
llvm-svn: 150608
|
|
|
|
|
|
| |
Patch by Sundeep!
llvm-svn: 150607
|
|
|
|
| |
llvm-svn: 150606
|
|
|
|
|
|
| |
This reverts commit 1656806a944bbd23e98c6e578810fe02495ab741.
llvm-svn: 150605
|
|
|
|
|
|
|
|
| |
as it's breaking the build.
This reverts commit 11241abca5e2a313412fed594bb9d9fa2a2057fb.
llvm-svn: 150604
|
|
|
|
| |
llvm-svn: 150603
|
|
|
|
| |
llvm-svn: 150601
|
|
|
|
| |
llvm-svn: 150591
|
|
|
|
|
|
| |
EmitValue (literal values). Previously only called on expressions in instructions. New test cases added to tls.s, tls-i386.s. Resolves PR11981.
llvm-svn: 150582
|
|
|
|
|
|
|
|
|
| |
The c'tor list is stored as a list of 'void ()*'s, so all of the functions are
bitcast to that. However, the dyn_cast doesn't automagically look through
bitcasts. Do that for it.
<rdar://problem/10813350>
llvm-svn: 150572
|
|
|
|
|
|
|
| |
used to incrementally update a created node without needing a
temporary node and RAUW.
llvm-svn: 150571
|
|
|
|
|
|
| |
I'll put MachineLICM back before PEI. All my arm/x86 benchmarks look good, but buildbots don't like it.
llvm-svn: 150568
|
|
|
|
| |
llvm-svn: 150567
|
|
|
|
| |
llvm-svn: 150566
|
|
|
|
| |
llvm-svn: 150565
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The llc command line options for enabling/disabling passes are local to CodeGen/Passes.cpp. This patch associates those options with standard pass IDs so they work regardless of how the target configures the passes.
A target has two ways of overriding standard passes:
1) Redefine the pass pipeline (override TargetPassConfig::add%Stage)
2) Replace or suppress individiual passes with TargetPassConfig::substitutePass.
In both cases, the command line options associated with the pass override the target default.
For example, say a target wants to disable machine instruction scheduling by default:
- The target calls disablePass(MachineSchedulerID) but otherwise does not override any TargetPassConfig methods.
- Without any llc options, no scheduler is run.
- With -enable-misched, the standard machine scheduler is run and honors the -misched=... flag to select the scheduler variant, which may be used for performance evaluation or testing.
Sorry overridePass is ugly. I haven't thought of a better way without replacing the cl::opt framework. I hope to do that one day...
I haven't figured out why CodeGen uses char& for pass IDs. AnalysisID is much easier to use and less bug prone. I'm using it wherever I can for internal implementation. Maybe later we can change the global pass ID definitions as well.
llvm-svn: 150563
|
|
|
|
|
|
| |
override specific passes.
llvm-svn: 150562
|
|
|
|
| |
llvm-svn: 150553
|
|
|
|
| |
llvm-svn: 150552
|
|
|
|
| |
llvm-svn: 150550
|
|
|
|
| |
llvm-svn: 150538
|
|
|
|
|
|
| |
lowered sequence has more than 1 user
llvm-svn: 150537
|
|
|
|
| |
llvm-svn: 150536
|
|
|
|
|
|
|
|
| |
Pretend that regmask interference ends at the 'dead' slot, even when
there is other interference ending at the 'reg' slot of the same
instruction.
llvm-svn: 150531
|
|
|
|
|
|
|
| |
Perform all comparisons at instruction granularity, and make sure
register masks on uses count in both gaps.
llvm-svn: 150530
|
|
|
|
|
|
|
|
|
|
|
| |
Only accept register masks when looking for an 'overlapping' def. When
Overlap is not set, the function searches for a proper definition of
Reg.
This means MI->modifiesRegister() considers register masks, but
MI->definesRegister() doesn't.
llvm-svn: 150529
|
|
|
|
|
|
|
|
|
|
|
|
| |
When a physreg is live in to a basic block, look for any instruction in
the block that clobbers the physreg.
The instruction doesn't have to properly redefine the register, any
overlapping clobber is OK.
This slightly changes live ranges when compiling with register masks.
llvm-svn: 150528
|
|
|
|
|
|
| |
The old DenseMap hashed order was very confusing.
llvm-svn: 150527
|
|
|
|
| |
llvm-svn: 150525
|
|
|
|
| |
llvm-svn: 150520
|
|
|
|
|
|
| |
all return type warnings.
llvm-svn: 150512
|
|
|
|
|
|
| |
Patch by Matt Johnson
llvm-svn: 150508
|
|
|
|
|
|
|
|
| |
The MachO back-end needs to emit the garbage collection flags specified in the
module flags. This is a WIP, so the front-end hasn't been modified to emit these
flags just yet. Documentation and front-end switching to occur soon.
llvm-svn: 150507
|
|
|
|
| |
llvm-svn: 150496
|
|
|
|
|
|
| |
only be live in to a block if it is the function entry point or a landing pad.
llvm-svn: 150494
|
|
|
|
|
|
|
|
| |
that are greater than the vector element type. For example BUILD_VECTOR
of type <1 x i1> with a constant i8 operand.
This patch fixes the assertion.
llvm-svn: 150477
|
|
|
|
| |
llvm-svn: 150471
|
|
|
|
| |
llvm-svn: 150466
|