llvm-project/llvm/lib/Transforms/Scalar
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
..
ADCE.cpp API changes for class Use size reduction, wave 1. 2008-04-06 20:25:17 +00:00
BasicBlockPlacement.cpp Remove attribution from file headers, per discussion on llvmdev. 2007-12-29 20:36:04 +00:00
CodeGenPrepare.cpp Implement a signficant optimization for inline asm: 2008-04-27 00:37:18 +00:00
CondPropagate.cpp Remove attribution from file headers, per discussion on llvmdev. 2007-12-29 20:36:04 +00:00
ConstantProp.cpp Remove attribution from file headers, per discussion on llvmdev. 2007-12-29 20:36:04 +00:00
DCE.cpp Remove attribution from file headers, per discussion on llvmdev. 2007-12-29 20:36:04 +00:00
DeadStoreElimination.cpp Be more precise when eliminating pointers bue to memcpy's. This allows more 2008-02-04 04:53:00 +00:00
GCSE.cpp API changes for class Use size reduction, wave 1. 2008-04-06 20:25:17 +00:00
GVN.cpp Remove unneeded #include's. 2008-04-21 07:47:38 +00:00
GVNPRE.cpp API changes for class Use size reduction, wave 1. 2008-04-06 20:25:17 +00:00
IndVarSimplify.cpp API changes for class Use size reduction, wave 1. 2008-04-06 20:25:17 +00:00
InstructionCombining.cpp change comments per review 2008-04-25 21:16:07 +00:00
JumpThreading.cpp Don't infininitely thread branches when a threaded edge 2008-04-25 04:12:29 +00:00
LICM.cpp Use empty() instead of comparing size() with zero. 2008-01-29 13:02:09 +00:00
LoopIndexSplit.cpp API changes for class Use size reduction, wave 1. 2008-04-06 20:25:17 +00:00
LoopRotation.cpp Revert r49614. As Dan pointed out, some of these aren't correct. 2008-04-14 17:38:21 +00:00
LoopStrengthReduce.cpp Minor whitespace and comment cleanups. 2008-04-14 18:26:16 +00:00
LoopUnroll.cpp Remove 'unwinds to' support from mainline. This patch undoes r47802 r47989 2008-04-25 16:53:59 +00:00
LoopUnswitch.cpp Remove 'unwinds to' support from mainline. This patch undoes r47802 r47989 2008-04-25 16:53:59 +00:00
Makefile remove attribution from lib Makefiles. 2007-12-29 20:09:26 +00:00
MemCpyOptimizer.cpp Refactor memcpyopt based on Chris' suggestions. Consolidate several functions 2008-04-21 07:45:10 +00:00
PredicateSimplifier.cpp Remove unnecessary <sstream> includes. 2008-04-14 20:40:47 +00:00
Reassociate.cpp Don't include <map> in Pass.h, which doesn't need it. This requires 2008-03-21 23:51:57 +00:00
Reg2Mem.cpp Remove attribution from file headers, per discussion on llvmdev. 2007-12-29 20:36:04 +00:00
SCCP.cpp Remove 'unwinds to' support from mainline. This patch undoes r47802 r47989 2008-04-25 16:53:59 +00:00
Scalar.cpp C and Objective Caml bindings for mem2reg and reg2mem. 2008-03-20 17:16:03 +00:00
ScalarReplAggregates.cpp API changes for class Use size reduction, wave 1. 2008-04-06 20:25:17 +00:00
SimplifyCFG.cpp API changes for class Use size reduction, wave 1. 2008-04-06 20:25:17 +00:00
TailDuplication.cpp replace a slow and verbose version of Instruction::isUsedOutsideOfBlock with 2008-04-20 22:18:22 +00:00
TailRecursionElimination.cpp API changes for class Use size reduction, wave 1. 2008-04-06 20:25:17 +00:00