Commit Graph

59370 Commits

Author SHA1 Message Date
Chris Lattner 8900ef1931 add .o file writing for inline asm in llc. Here's a silly
demo:

$ clang asm.c -S -o - -emit-llvm | llc -filetype=obj -o t.o
<inline asm>:1:2: error: unrecognized instruction
	abc incl    %eax
	^
LLVM ERROR: Error parsing inline asm

Only problem seems to be that the parser finalizes OutStreamer 
at the end of the first inline asm, which isn't what we want.
For example:

$ cat asm.c
int foo(int X) {
 __asm__ ("incl    %0" : "+r" (X));
 return X;
}
$ clang asm.c -S -o - -emit-llvm | llc
...
	subq	$8, %rsp
	movl	%edi, (%rsp)
	movl	%edi, %eax
	## InlineAsm Start
	incl    %eax
	## InlineAsm End
	movl	%eax, (%rsp)
	movl	%eax, 4(%rsp)
	addq	$8, %rsp
	ret
$ clang asm.c -S -o - -emit-llvm | llc -filetype=obj -o t.o
$ otool -tv t.o
t.o:
(__TEXT,__text) section
_foo:
0000000000000000	subq	$0x08,%rsp
0000000000000004	movl	%edi,(%rsp)
0000000000000007	movl	%edi,%eax
0000000000000009	incl	%eax
$ 

don't stop at inc!

llvm-svn: 100491
2010-04-05 23:11:24 +00:00
Chris Lattner bdc3f34150 add a comment.
llvm-svn: 100490
2010-04-05 23:07:42 +00:00
Chris Lattner 3d18e71ae8 tidy #includes.
llvm-svn: 100489
2010-04-05 23:07:18 +00:00
Bill Wendling 30346347b3 Output floating point representations in DWARF format. This is done by outputing
the FP encoding directly as a hex representation.

llvm-svn: 100487
2010-04-05 22:59:21 +00:00
Chris Lattner 802e1088de update unit test for api change.
llvm-svn: 100486
2010-04-05 22:49:48 +00:00
Chris Lattner 0e45d24a4e stringref-ize the MemoryBuffer::get apis. This requires
a co-committed clang patch.

llvm-svn: 100485
2010-04-05 22:42:30 +00:00
Evan Cheng b7a20ee5b5 Add nounwind.
llvm-svn: 100482
2010-04-05 22:30:05 +00:00
Evan Cheng 23d16d5b86 Fix ADD32rr_alt instruction encoding bug. Patch by Marius Wachtler.
llvm-svn: 100480
2010-04-05 22:21:09 +00:00
Chris Lattner adca608281 fix a really nasty bug that Evan was tracking in SCCP. When resolving
undefs in branches/switches, we have two cases: a branch on a literal
undef or a branch on a symbolic value which is undef.  If we have a
literal undef, the code was correct: forcing it to a constant is the
right thing to do.

If we have a branch on a symbolic value that is undef, we should force
the symbolic value to a constant, which then makes the successor block
live.  Forcing the condition of the branch to being a constant isn't 
safe if later paths become live and the value becomes overdefined.  This
is the case that 'forcedconstant' is designed to handle, so just use it.

This fixes rdar://7765019 but there is no good testcase for this, the
one I have is too insane to be useful in the future.

llvm-svn: 100478
2010-04-05 22:14:48 +00:00
Chris Lattner c832c1bf69 some code cleanups, use SwitchInst::findCaseValue, reduce indentation
llvm-svn: 100468
2010-04-05 21:18:32 +00:00
Evan Cheng ba930449a9 Code clean up.
llvm-svn: 100467
2010-04-05 21:16:25 +00:00
Eric Christopher 1290fa0f72 Remove FIXME.
llvm-svn: 100466
2010-04-05 21:14:32 +00:00
Douglas Gregor 41e692dcf1 Introduce MaybeOwningPtr, a smart pointer that may (or may not) have
ownership over the pointer it contains. Useful when we want to
communicate ownership while still having several clients holding on to
the same pointer *without* introducing reference counting.

llvm-svn: 100463
2010-04-05 21:09:22 +00:00
Jeffrey Yasskin 7dd816097a Fix OProfileJITEventListener build for new DebugLoc.
llvm-svn: 100461
2010-04-05 21:09:12 +00:00
Dan Gohman f38547c83f Add a comment.
llvm-svn: 100459
2010-04-05 20:24:08 +00:00
Chris Lattner bc217873e3 lowering a volatile llvm.memcpy to a libc memcpy is ok.
PR6779

llvm-svn: 100457
2010-04-05 20:11:45 +00:00
Dan Gohman 918a90a3ca Don't do code sinking on unreachable blocks. It's unprofitable and hazardous.
llvm-svn: 100455
2010-04-05 19:17:22 +00:00
Dan Gohman 976d1b6002 Add an isReachableFromEntry to MachineDominators, following the one
in Dominators.

llvm-svn: 100454
2010-04-05 19:16:38 +00:00
Tanya Lattner e30614cfdd Update to note that clang has a baseline now. Dropping x86-32 for MacOS.
llvm-svn: 100447
2010-04-05 18:35:37 +00:00
Chris Lattner 6e39c4a097 don't use emitlabel in the arm asm printer yet, the order
isn't well specified.  ARM really needs to have its instprinter
finished at some point.

llvm-svn: 100439
2010-04-05 17:52:31 +00:00
Owen Anderson f93bdd1024 Push const through the regex engine. Fixes some of the warnings in PR6616.
llvm-svn: 100438
2010-04-05 17:50:20 +00:00
Chris Lattner 6a0e89aefb fix a couple problems I introduced handling symbols
with spaces in them.  Sym->getName()  !=   OS << *Sym

llvm-svn: 100434
2010-04-05 16:32:14 +00:00
Benjamin Kramer 0151d7b025 Disambiguate else.
llvm-svn: 100423
2010-04-05 10:17:15 +00:00
Chris Lattner 6efe955824 trim some prototypes.
llvm-svn: 100420
2010-04-05 06:21:01 +00:00
Chris Lattner fb964e57e5 remove the now-redundant MMI pointer in SelectionDAG.
llvm-svn: 100419
2010-04-05 06:19:28 +00:00
Chris Lattner 28f2fdafcd hopefully sate the clang self host build, which is apparently
instantiating some folding set stuff that GCC isn't, requiring 
some types to not be incomplete.

I don't know if clang is right or wrong, but unbreaking the
bot is goodness.  Here's the broken build:
http://google1.osuosl.org:8011/builders/clang-x86_64-darwin10-selfhost/builds/1813/steps/compile.llvm.stage2/logs/stdio

llvm-svn: 100418
2010-04-05 06:12:01 +00:00
Chris Lattner 6361414c88 remove some redundant MMI arguments.
llvm-svn: 100417
2010-04-05 06:10:13 +00:00
Chris Lattner 305f2efb63 unthread MMI from FastISel
llvm-svn: 100416
2010-04-05 06:05:26 +00:00
Chris Lattner 82ff9af068 remove the MMI pointer from MachineFrameInfo.
llvm-svn: 100415
2010-04-05 05:57:52 +00:00
Chris Lattner 9f53dcd7b9 enhance MachineFunction to have a MMI pointer.
llvm-svn: 100414
2010-04-05 05:49:50 +00:00
Nick Lewycky a3c9f210f4 Add MC and LTO, two terms I just had to explain on IRC.
llvm-svn: 100413
2010-04-05 05:48:47 +00:00
Chris Lattner 50b1bf63a7 simplify code.
llvm-svn: 100412
2010-04-05 05:48:36 +00:00
Chris Lattner 3ac081cbef prune #includes.
llvm-svn: 100411
2010-04-05 05:43:16 +00:00
Chris Lattner 64a168efb6 privatize more stuff, eliminate vtables.
llvm-svn: 100410
2010-04-05 05:32:45 +00:00
Chris Lattner acda87bdb1 reprivatize now that DwarfWriter is gone.
llvm-svn: 100409
2010-04-05 05:31:04 +00:00
Chris Lattner da790ea006 prune #includes, MMI can never be null
llvm-svn: 100408
2010-04-05 05:28:23 +00:00
Chris Lattner 3f3fb970e4 prune #includes, realize the MMI can never be null.
llvm-svn: 100407
2010-04-05 05:24:55 +00:00
Chris Lattner 10cb0f4338 finally blast DwarfWriter away.
llvm-svn: 100406
2010-04-05 05:12:59 +00:00
Chris Lattner f0d6bd3ef4 change AsmPrinter to use DwarfDebug/DwarfException directly
instead of going through DwarfWriter.

llvm-svn: 100405
2010-04-05 05:11:15 +00:00
Johnny Chen dacfd2c6d4 Get rid of traling whitespaces. No functionality change.
llvm-svn: 100404
2010-04-05 04:51:50 +00:00
Johnny Chen dba13e7922 The disassembler impl. of MCDisassembler::getInstruction() was using the pattern
uint32_t insn;
  MemoryObject.readBytes(Address, 4, (uint8_t*)&insn, NULL)

to read 4 bytes of memory contents into a 32-bit uint variable.  This leaves the
interpretation of byte order up to the host machine and causes PPC test cases of
arm-tests, neon-tests, and thumb-tests to fail.  Fixed to use a byte array for
reading the memory contents and shift the bytes into place for the 32-bit uint
variable in the ARM case and 16-bit halfword in the Thumb case.

llvm-svn: 100403
2010-04-05 04:46:17 +00:00
Chris Lattner f0ef4e4019 implement EmitFunctionEntryLabel to emit the .cc_top directive,
allowing xcore to use the normal runOnMachineFunction 
implementation.

llvm-svn: 100402
2010-04-05 04:44:02 +00:00
Chris Lattner 904f21700c don't reference DwarfWriter
llvm-svn: 100401
2010-04-05 04:11:11 +00:00
Chris Lattner f5d0636850 trim some spurious references to DwarfWriter. SDIsel really doesn't
need it anymore, so don't addRequire it.

llvm-svn: 100400
2010-04-05 04:09:20 +00:00
Chris Lattner a49ac8ace0 prune some #includes.
llvm-svn: 100399
2010-04-05 04:04:10 +00:00
Chris Lattner 196dbdc160 eliminate DwarfDebug::shouldEmit, which is the same now as MMI::hasDebugInfo
llvm-svn: 100386
2010-04-05 03:52:55 +00:00
Chris Lattner d2f5062c6d fix a regression on 2009-08-17-DebugInfo.m
llvm-svn: 100385
2010-04-05 03:49:26 +00:00
Jakob Stoklund Olesen b93331f3be Replace TSFlagsFields and TSFlagsShifts with a simpler TSFlags field.
When a target instruction wants to set target-specific flags, it should simply
set bits in the TSFlags bit vector defined in the Instruction TableGen class.

This works well because TableGen resolves member references late:

class I : Instruction {
  AddrMode AM = AddrModeNone;
  let TSFlags{3-0} = AM.Value;
}

let AM = AddrMode4 in
def ADD : I;

TSFlags gets the expected bits from AddrMode4 in this example.

llvm-svn: 100384
2010-04-05 03:10:20 +00:00
Chris Lattner ab5dc34351 selection dag doesn't need DwarfWriter, remove some tendrils.
llvm-svn: 100382
2010-04-05 02:23:33 +00:00
Chris Lattner 7cfa70e9b3 fastisel doesn't need DwarfWriter, remove some tendricles.
llvm-svn: 100381
2010-04-05 02:19:28 +00:00
Evan Cheng 0b8adb0652 Temporarily remove to disable building of ARM disassembler.
llvm-svn: 100380
2010-04-05 01:57:50 +00:00
Evan Cheng 492a82e426 Re-apply 100265 but instead disable building of ARM disassembly for now.
llvm-svn: 100379
2010-04-05 01:34:00 +00:00
Evan Cheng 876a5015af Reverting 100265 to try to get buildbots green again. Lots of self-hosting buildbots started complaining since this commit. Also xfail ARM disassembly tests.
llvm-svn: 100378
2010-04-05 01:04:27 +00:00
Chris Lattner 626cb66fdb just have all targets create the DwarfWriter.
llvm-svn: 100377
2010-04-05 00:42:55 +00:00
Chris Lattner 8b30492da3 simplify various getAnalysisUsage implementations.
llvm-svn: 100376
2010-04-05 00:38:44 +00:00
Chris Lattner eeaa6d67a2 nuke DwarfPrinter
llvm-svn: 100375
2010-04-05 00:27:29 +00:00
Chris Lattner fd79502e08 make DwarfException not inherit from DwarfPrinter.
llvm-svn: 100374
2010-04-05 00:26:50 +00:00
Chris Lattner 5a00dea332 change SizeOf to take AsmPrinter instead of TargetData,
simplifying a bunch of code.

llvm-svn: 100373
2010-04-05 00:18:22 +00:00
Chris Lattner 3a383cb7d9 1) make DIE take AsmPrinter instead of DwarfPrinter.
2) change DwarfDebug to not inherit from DwarfPrinter.

llvm-svn: 100372
2010-04-05 00:13:49 +00:00
Chris Lattner aabc6041de Move EmitFrameMoves into AsmPrinter.
llvm-svn: 100371
2010-04-04 23:41:46 +00:00
Chris Lattner 794dd1db08 missed a header :(
llvm-svn: 100370
2010-04-04 23:36:52 +00:00
Chris Lattner 8423cae590 simplify code and reduce indentation.
llvm-svn: 100369
2010-04-04 23:31:58 +00:00
Chris Lattner 70a4fcea1e now that the magic is dispelled, move EmitSectionOffset to AsmPrinter.
llvm-svn: 100368
2010-04-04 23:25:33 +00:00
Chris Lattner 324c86600d eliminate the magic AbsoluteDebugSectionOffsets MAI hook,
which is really a property of the section being referenced.
Add a predicate to MCSection to replace it.

Yay for reduction in magic.

llvm-svn: 100367
2010-04-04 23:22:29 +00:00
Chris Lattner d442aa368d only emit section labels if we have debug info, fixing a few
regtest failures.

llvm-svn: 100366
2010-04-04 23:17:54 +00:00
Chris Lattner e58b547460 I was wrong, ocaml isn't referencing 'Ldata_begin', so remove it.
llvm-svn: 100365
2010-04-04 23:10:38 +00:00
Chris Lattner 0d3f3bdd3c add some assertions to EmitSectionOffset.
llvm-svn: 100364
2010-04-04 23:06:31 +00:00
Chris Lattner 1fbf53b970 stop emitting some dead L labels.
llvm-svn: 100363
2010-04-04 23:02:02 +00:00
Chris Lattner 6629ca978e Store an use the symbols emitted at the start of the debug
sections instead of magically rematerializing them later.

llvm-svn: 100362
2010-04-04 22:59:04 +00:00
Chris Lattner 46355d87a8 remove the didInitial ivar, rename emitInitial to be more
descriptive, change EmitSectionOffset back to taking a
symbol instead of a string.

llvm-svn: 100361
2010-04-04 22:33:59 +00:00
Chris Lattner 78528f9a36 simplify EmitSectionOffset a little bit, improve comments.
llvm-svn: 100360
2010-04-04 22:25:14 +00:00
Chris Lattner 8964b838e4 revert my patch, need to reconsider this and figure out what is really going on.
llvm-svn: 100358
2010-04-04 21:49:31 +00:00
Chris Lattner 407f848835 fix pasto, this is the wrong setting for arm elf.
llvm-svn: 100357
2010-04-04 21:37:20 +00:00
Chris Lattner 638b3e0000 The "IsSmall" argument to EmitSectionOffset is always true,
constant fold it away.

llvm-svn: 100356
2010-04-04 21:34:40 +00:00
Chris Lattner c7cc815522 eliminate the "isEH" argument to EmitSectionOffset.
llvm-svn: 100355
2010-04-04 21:31:54 +00:00
Chris Lattner e239fa05cd isAbsoluteEHSectionOffsets always returns false, eliminate it
and substitute false at the one call site.

llvm-svn: 100354
2010-04-04 21:29:44 +00:00
Jakob Stoklund Olesen d03ac95d5d Clean up SSEDomainFix pass.
Restrict bit mask operations to the DomainValue class. Rename methods for
clarity.

llvm-svn: 100353
2010-04-04 21:27:26 +00:00
Chris Lattner 4af7c5a650 don't reset the default.
llvm-svn: 100352
2010-04-04 21:06:50 +00:00
Chris Lattner e619c0d3e9 move some more stuff to asmprinter.
llvm-svn: 100351
2010-04-04 20:20:50 +00:00
Chris Lattner 07c1b94faa simplify some code.
llvm-svn: 100350
2010-04-04 20:10:41 +00:00
Chris Lattner b75af3c5a9 move EmitEncodingByte to AsmPrinter.
llvm-svn: 100349
2010-04-04 20:04:21 +00:00
Chris Lattner baf2be0561 move EmitCFAByte to AsmPrinter.
llvm-svn: 100348
2010-04-04 20:01:25 +00:00
Chris Lattner f1429f1fe3 inline EmitDifference away.
llvm-svn: 100347
2010-04-04 19:58:12 +00:00
Chris Lattner 4e4549deea resolve a fixme.
llvm-svn: 100346
2010-04-04 19:28:59 +00:00
Chris Lattner a179b52361 move gettemplabel and getdwlabel to AsmPrinter and rename
them for consistency.

llvm-svn: 100345
2010-04-04 19:25:43 +00:00
Chris Lattner 9efd118938 move uleb/sleb printing into AsmPrinter from DwarfPrinter.
llvm-svn: 100344
2010-04-04 19:09:29 +00:00
Chris Lattner 2b40a207bc more interface cleanup make some helpers static functions.
llvm-svn: 100343
2010-04-04 18:58:53 +00:00
Chris Lattner 7bde8c07a7 clean up the asmprinter header and privatize some stuff.
llvm-svn: 100342
2010-04-04 18:52:31 +00:00
Chris Lattner baa2c972e9 use stringref instead of strtol to avoid errno gymnastics.
llvm-svn: 100341
2010-04-04 18:42:18 +00:00
Chris Lattner 1e15869d1f split inline asm support out to its own .cpp file.
llvm-svn: 100340
2010-04-04 18:34:07 +00:00
Chris Lattner 8ff29c523e inline processDebugLoc and simplify it.
llvm-svn: 100339
2010-04-04 18:18:51 +00:00
Chris Lattner c334d80b0d minor tidying.
llvm-svn: 100338
2010-04-04 18:16:38 +00:00
Chris Lattner 4a4710a055 clean up the asmprinter interface a bit, rename a few
"Print" methods to "Emit".  Emit is something that goes
to an mc streamer, Print is something that goes to a
raw_ostream (for inline asm) 

llvm-svn: 100337
2010-04-04 18:14:01 +00:00
Chris Lattner 21dc46e256 remove TargetMachine.h #include, also, TRI isn't used frequently
enough to warrant caching in AsmPrinter, so remove it.

llvm-svn: 100336
2010-04-04 18:06:11 +00:00
Jakob Stoklund Olesen 42caaa4f5b Switch SSEDomainFix to SpecificBumpPtrAllocator.
llvm-svn: 100332
2010-04-04 18:00:21 +00:00
Chris Lattner 2cf5f9ec05 lazily allocate the GCMetadataPrinters map and remove DenseMap
from the AsmPrinter interface.

llvm-svn: 100331
2010-04-04 17:57:56 +00:00
Nicolas Geoffray 9b9dc4d4c6 CurFn is only used for relocations. Use EmissionDetails.MF->getFunction() instead.
llvm-svn: 100328
2010-04-04 10:31:49 +00:00
Chris Lattner d20699bc87 Momentous day: remove the "O" member from AsmPrinter. Now all
"asm printering" happens through MCStreamer.  This also 
Streamerizes PIC16 debug info, which escaped my attention.

This removes a leak from LLVMTargetMachine of the 'legacy'
output stream.

llvm-svn: 100327
2010-04-04 08:18:47 +00:00
Chris Lattner 462720b1b6 now that all operand printing happens to specified streams, we can
print function level inline asm with EmitInlineAsm instead of writing
it directly to "O".

llvm-svn: 100326
2010-04-04 07:50:12 +00:00
Chris Lattner 1198002c81 remove the raw_ostream from various dwarf printing things.
The only thing left is LEB printing, which uses EmitRawText
for now.

llvm-svn: 100325
2010-04-04 07:48:20 +00:00