|  | Commit message (Collapse) | Author | Age | Files | Lines | 
|---|
| ... |  | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | this:
	%ESI<def> = MOV32rr %EDI<kill>
	ADJCALLSTACKDOWN64 0, %RSP<imp-def>, %EFLAGS<imp-def,dead>, %RSP<imp-use>
	%reg1027<def> = MOVZX64rr32 %ESI
	%reg1027<def> = ADD64ri8 %reg1027, 15, %EFLAGS<imp-def,dead>
	%reg1027<def> = AND64ri8 %reg1027, -16, %EFLAGS<imp-def,dead>
	%RDI<def> = MOV64rr %RSP
	%RDI<def> = SUB64rr %RDI, %reg1027<kill>, %EFLAGS<imp-def,dead>
	%RSP<def> = MOV64rr %RDI
into this:
4	%reg1024<def> = MOV32rr %EDI<kill>
12	ADJCALLSTACKDOWN64 0, %RSP<imp-def>, %EFLAGS<imp-def,dead>, %RSP<imp-use>
20	%reg1025<def> = MOVZX64rr32 %reg1024
28	%reg1026<def> = MOV64rr %reg1025<kill>
36	%reg1026<def> = ADD64ri8 %reg1026, 15, %EFLAGS<imp-def,dead>
44	%reg1027<def> = MOV64rr %reg1026<kill>
52	%reg1027<def> = AND64ri8 %reg1027, -16, %EFLAGS<imp-def,dead>
60	%reg1028<def> = MOV64rr %RSP
68	%reg1029<def> = MOV64rr %reg1028<kill>
76	%reg1029<def> = SUB64rr %reg1029, %reg1027<kill>, %EFLAGS<imp-def,dead>
84	%RSP<def> = MOV64rr %reg1029
This helps greatly when debugging register allocation and coalescing
problems.
llvm-svn: 76615 | 
| | 
| 
| 
| 
| 
| 
| | and call PrintGlobalVariable, allowing elimination and simplification
of various targets.
llvm-svn: 76604 | 
| | 
| 
| 
| 
| 
| | MachineBasicBlock.  We'll use these shortly.
llvm-svn: 76603 | 
| | 
| 
| 
| | llvm-svn: 76598 | 
| | 
| 
| 
| 
| 
| | LLVM IR concept.
llvm-svn: 76590 | 
| | 
| 
| 
| 
| 
| | ReuseInfo::GetRegForReload() should make sure the "switched" register is in the desired register class. I'm surprised this hasn't caused more failures in the past.
llvm-svn: 76558 | 
| | 
| 
| 
| | llvm-svn: 76553 | 
| | 
| 
| 
| 
| 
| 
| | global declared symbols are initialized with references from other global
symbols.
llvm-svn: 76540 | 
| | 
| 
| 
| 
| 
| 
| 
| | Is this really a winning transformation?
fold (shl (srl x, c1), c2) -> (shl (and x, (shl -1, c1)), (sub c2, c1)) or                                                                              
                              (srl (and x, (shl -1, c1)), (sub c1, c2))
llvm-svn: 76535 | 
| | 
| 
| 
| | llvm-svn: 76533 | 
| | 
| 
| 
| | llvm-svn: 76519 | 
| | 
| 
| 
| 
| 
| 
| | to a place where it affects everything.  Occurs
only on calls AFAIK.
llvm-svn: 76502 | 
| | 
| 
| 
| 
| 
| | humans can understand it.
llvm-svn: 76480 | 
| | 
| 
| 
| 
| 
| 
| 
| | "LinkerPrivatePrefix". It seems to have been used in only one place before I
started this "linker_private" business. I'm thinking that a rename is in
order...
llvm-svn: 76479 | 
| | 
| 
| 
| 
| 
| | guessing).
llvm-svn: 76472 | 
| | 
| 
| 
| 
| 
| | resulting interval's register class.
llvm-svn: 76458 | 
| | 
| 
| 
| 
| 
| 
| | are referenced, ignore the relocation entry and patch the relocatable field with
the computed symbol offset directly
llvm-svn: 76414 | 
| | 
| 
| 
| 
| 
| | doesn't cause ".no_dead_strip" to be emitted on darwin.
llvm-svn: 76399 | 
| | 
| 
| 
| | llvm-svn: 76397 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| | "private" symbols which the assember shouldn't strip, but which the linker may
remove after evaluation. This is mostly useful for Objective-C metadata.
This is plumbing, so we don't have a use of it yet. More to come, etc.
llvm-svn: 76385 | 
| | 
| 
| 
| 
| 
| 
| 
| | Inline asm instructions may have additional <imp-def,kill> register operands.
These operands are not marked with a flag like the normal asm operands, so we
must not assert that there is a flag.
llvm-svn: 76373 | 
| | 
| 
| 
| | llvm-svn: 76356 | 
| | 
| 
| 
| 
| 
| | usage inside getSection* functions
llvm-svn: 76347 | 
| | 
| 
| 
| | llvm-svn: 76334 | 
| | 
| 
| 
| 
| 
| 
| | Use proper relocation type to build relocations for JumpTables (rodata
sections).
llvm-svn: 76326 | 
| | 
| 
| 
| | llvm-svn: 76282 | 
| | 
| 
| 
| | llvm-svn: 76281 | 
| | 
| 
| 
| 
| 
| | illegal ams.
llvm-svn: 76258 | 
| | 
| 
| 
| | llvm-svn: 76246 | 
| | 
| 
| 
| | llvm-svn: 76239 | 
| | 
| 
| 
| | llvm-svn: 76237 | 
| | 
| 
| 
| | llvm-svn: 76236 | 
| | 
| 
| 
| 
| 
| 
| | emit the EHFrame label next to the section_eh_frame and
eh_frame_common labels.
llvm-svn: 76234 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | starting in getCurrentFunctionEHName.  Among other problems,
we would try to privative a "foo.eh" label, but end up emitting
the label as _Lfoo.eh instead of L_foo.eh on darwin.  This is really
bad, and the linker has always tolerated these labels existing.
For now, just emit them as _foo.eh.
This patch also fixes problems with ".eh" labels on unnamed
functions and eliminates two strangely defined TargetAsmInfo
hooks.
llvm-svn: 76231 | 
| | 
| 
| 
| | llvm-svn: 76228 | 
| | 
| 
| 
| 
| 
| | LiveIntervals::processImplicitDefs a little more aggressive and teaching liveintervals to make use of isUndef marker on MachineOperands.
llvm-svn: 76223 | 
| | 
| 
| 
| | llvm-svn: 76198 | 
| | 
| 
| 
| 
| 
| | vector insertions inside the loop
llvm-svn: 76195 | 
| | 
| 
| 
| | llvm-svn: 76153 | 
| | 
| 
| 
| | llvm-svn: 76131 | 
| | 
| 
| 
| | llvm-svn: 76123 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| | stack alignment right when it is.  This is not
ideal but conservatively correct.  Adjust a test
to compensate for changed stack offset value.
gcc.apple/asm-block-57.c
llvm-svn: 76120 | 
| | 
| 
| 
| | llvm-svn: 76117 | 
| | 
| 
| 
| | llvm-svn: 76111 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | call to the MachineCodeEmitter interface and made copying the start
line of a function not conditional on whether we're emitting Dwarf
debug information. I'll propagate the processDebugLoc() calls to the
non-X86 targets in a followup patch.
In the long run, it'll probably be better to gather this information
through the DwarfWriter, but the DwarfWriter currently depends on the
AsmPrinter and TargetAsmInfo, and fixing that would be out of the way
for this patch.
There's a bug in OProfile 0.9.4 that makes it ignore line numbers for
addresses above 4G, and a patch fixing it at
http://thread.gmane.org/gmane.linux.oprofile/7634
Sample output:
$ sudo opcontrol --reset; sudo opcontrol --start-daemon; sudo opcontrol --start; `pwd`/Debug/bin/lli fib.bc; sudo opcontrol --stop
Signalling daemon... done
Profiler running.
fib(40) == 165580141
Stopping profiling.
$ opreport -g -d -l `pwd`/Debug/bin/lli|head -60
Overflow stats not available
CPU: Core 2, speed 1998 MHz (estimated)
Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (Unhalted core cycles) count 100000
vma      samples  %        linenr info                 image name               symbol name
00007f67a30370b0 25489    61.2554  fib.c:24                    10946.jo                 fib_left
  00007f67a30370b0 1634      6.4106  fib.c:24
  00007f67a30370b1 83        0.3256  fib.c:24
  00007f67a30370b9 1997      7.8348  fib.c:24
  00007f67a30370c6 2080      8.1604  fib.c:27
  00007f67a30370c8 988       3.8762  fib.c:27
  00007f67a30370cd 1315      5.1591  fib.c:27
  00007f67a30370cf 251       0.9847  fib.c:27
  00007f67a30370d3 1191      4.6726  fib.c:27
  00007f67a30370d6 975       3.8252  fib.c:27
  00007f67a30370db 1010      3.9625  fib.c:27
  00007f67a30370dd 242       0.9494  fib.c:27
  00007f67a30370e1 2782     10.9145  fib.c:28
  00007f67a30370e5 3768     14.7828  fib.c:28
  00007f67a30370eb 615       2.4128  (no location information)
  00007f67a30370f3 6558     25.7287  (no location information)
00007f67a3037100 15603    37.4973  fib.c:29                    10946.jo                 fib_right
  00007f67a3037100 1646     10.5493  fib.c:29
  00007f67a3037101 45        0.2884  fib.c:29
  00007f67a3037109 2372     15.2022  fib.c:29
  00007f67a3037116 2234     14.3178  fib.c:32
  00007f67a3037118 612       3.9223  fib.c:32
  00007f67a303711d 622       3.9864  fib.c:32
  00007f67a303711f 385       2.4675  fib.c:32
  00007f67a3037123 404       2.5892  fib.c:32
  00007f67a3037126 634       4.0633  fib.c:32
  00007f67a303712b 870       5.5759  fib.c:32
  00007f67a303712d 62        0.3974  fib.c:32
  00007f67a3037131 1848     11.8439  fib.c:33
  00007f67a3037135 2840     18.2016  fib.c:33
  00007f67a303713a 1         0.0064  fib.c:33
  00007f67a303713b 1023      6.5564  (no location information)
  00007f67a3037143 5         0.0320  (no location information)
000000000080c1e4 15        0.0360  MachineOperand.h:150        lli                      llvm::MachineOperand::isReg() const
  000000000080c1e4 6        40.0000  MachineOperand.h:150
  000000000080c1ec 2        13.3333  MachineOperand.h:150
...
llvm-svn: 76102 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | operands.
The inline asm operands must be parsed from the first flag, you cannot assume
that an immediate operand preceeding a register use operand is the flag.
PowerPC "m" operands are represented as (flag, imm, reg) triples.
isRegTiedToDefOperand() would incorrectly interpret the imm as the flag.
llvm-svn: 76101 | 
| | 
| 
| 
| 
| 
| | indices.
llvm-svn: 76100 | 
| | 
| 
| 
| | llvm-svn: 76097 | 
| | 
| 
| 
| 
| 
| 
| 
| | number of issues in
our current context-passing stuff, which is also fixed here
llvm-svn: 76089 | 
| | 
| 
| 
| | llvm-svn: 75955 |