llvm-6502/include/llvm
Chris Lattner e6f7c267df Change handling of illegal vector types to widen when possible instead of
expanding: e.g. <2 x float> -> <4 x float> instead of -> 2 floats.  This
affects two places in the code: handling cross block values and handling
function return and arguments.  Since vectors are already widened by 
legalizetypes, this gives us much better code and unblocks x86-64 abi
and SPU abi work.

For example, this (which is a silly example of a cross-block value):
define <4 x float> @test2(<4 x float> %A) nounwind {
 %B = shufflevector <4 x float> %A, <4 x float> undef, <2 x i32> <i32 0, i32 1>
 %C = fadd <2 x float> %B, %B
  br label %BB
BB:
 %D = fadd <2 x float> %C, %C
 %E = shufflevector <2 x float> %D, <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
 ret <4 x float> %E
}

Now compiles into:

_test2:                                 ## @test2
## BB#0:
 addps %xmm0, %xmm0
 addps %xmm0, %xmm0
 ret

previously it compiled into:

_test2:                                 ## @test2
## BB#0:
 addps %xmm0, %xmm0
 pshufd $1, %xmm0, %xmm1
                                        ## kill: XMM0<def> XMM0<kill> XMM0<def>
 insertps $0, %xmm0, %xmm0
 insertps $16, %xmm1, %xmm0
 addps %xmm0, %xmm0
 ret

This implements rdar://8230384



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112101 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-25 22:49:25 +00:00
..
ADT Avoid O(n*m) complexity in StringRef::find_first(_not)_of(StringRef). 2010-08-23 18:16:08 +00:00
Analysis Fix header define to reflect the name of the file. 2010-08-25 19:28:39 +00:00
Assembly
Bitcode don't emit zero bit fields with Emit, fixing undefined behavior, 2010-08-18 00:29:18 +00:00
CodeGen tidy up 2010-08-25 22:45:53 +00:00
CompilerDriver llvmc: Make syntax more consistent. 2010-08-23 23:21:23 +00:00
Config Regenerate. 2010-08-25 08:45:06 +00:00
ExecutionEngine
MC First bit of support for the dwarf .loc directive. This patch updates the 2010-08-24 20:32:42 +00:00
Support Trailing whitespace. 2010-08-23 19:23:54 +00:00
System
Target Change handling of illegal vector types to widen when possible instead of 2010-08-25 22:49:25 +00:00
Transforms Use MapValue in the Linker instead of having a private function 2010-08-24 18:50:07 +00:00
AbstractTypeUser.h
Argument.h
Attributes.h
AutoUpgrade.h
BasicBlock.h
CallGraphSCCPass.h
CallingConv.h
CMakeLists.txt
Constant.h
Constants.h
DerivedTypes.h
Function.h
GlobalAlias.h
GlobalValue.h Create the new linker type "linker_private_weak_def_auto". 2010-08-20 22:05:50 +00:00
GlobalVariable.h
GVMaterializer.h
InlineAsm.h
InstrTypes.h
Instruction.def
Instruction.h
Instructions.h
IntrinsicInst.h
Intrinsics.h
Intrinsics.td
IntrinsicsAlpha.td Modify the intrinsics pattern to separate out the "return" types from the 2008-11-13 09:08:33 +00:00
IntrinsicsARM.td Replace the arm.neon.vmovls and vmovlu intrinsics with vector sign-extend and 2010-08-20 04:54:02 +00:00
IntrinsicsCellSPU.td
IntrinsicsPowerPC.td
IntrinsicsX86.td Add a new llvm.x86.int intrinsic, allowing access to the 2010-08-23 19:39:25 +00:00
IntrinsicsXCore.td
LinkAllPasses.h
LinkAllVMCore.h Delete SlowOperationInformer, which is no longer used. 2010-08-20 18:07:37 +00:00
Linker.h
LLVMContext.h
Metadata.h MDNode, MDString, and NamedMDNode are not meant to be subclassed; 2010-08-24 15:34:03 +00:00
Module.h
OperandTraits.h
Operator.h
Pass.h Revert r111199; it breaks -debug-pass=Structure output. 2010-08-19 01:29:07 +00:00
PassAnalysisSupport.h
PassManager.h
PassManagers.h Revert r111199; it breaks -debug-pass=Structure output. 2010-08-19 01:29:07 +00:00
PassRegistry.h
PassSupport.h
SymbolTableListTraits.h
Type.h
TypeSymbolTable.h
Use.h
User.h
Value.h
ValueSymbolTable.h