llvm-project/llvm/lib/Transforms
Chris Lattner 2237973438 Implement a signficant optimization for inline asm:
When choosing between constraints with multiple options,
like "ir", test to see if we can use the 'i' constraint and
go with that if possible.  This produces more optimal ASM in
all cases (sparing a register and an instruction to load it),
and fixes inline asm like this:

void test () {
  asm volatile (" %c0 %1 " : : "imr" (42), "imr"(14));
}

Previously we would dump "42" into a memory location (which
is ok for the 'm' constraint) which would cause a problem
because the 'c' modifier is not valid on memory operands.

Isn't it great how inline asm turns 'missed optimization'
into 'compile failed'??

Incidentally, this was the todo in 
PowerPC/2007-04-24-InlineAsm-I-Modifier.ll

Please do NOT pull this into Tak.

llvm-svn: 50315
2008-04-27 00:37:18 +00:00
..
Hello Remove attribution from file headers, per discussion on llvmdev. 2007-12-29 20:36:04 +00:00
IPO When SRoA'ing a global variable, make sure the new globals get the 2008-04-26 07:40:11 +00:00
Instrumentation Use Intrinsic::getDeclaration in more places. 2008-04-07 13:45:04 +00:00
Scalar Implement a signficant optimization for inline asm: 2008-04-27 00:37:18 +00:00
Utils Feedback from chris 2008-04-25 17:45:52 +00:00
Makefile remove attribution from lib Makefiles. 2007-12-29 20:09:26 +00:00