89d81878d2 
								
							 
						 
						
							
							
								
								Differentiate between the MachO and the ELF ABI the CALL instruction.  
							
							... 
							
							
							
							llvm-svn: 34667 
							
						 
						
							2007-02-27 13:01:19 +00:00  
				
					
						
							
							
								 
						
							
								43df5b335c 
								
							 
						 
						
							
							
								
								implement support for the linux/ppc function call ABI.  Patch by  
							
							... 
							
							
							
							Nicolas Geoffray!
llvm-svn: 34574 
							
						 
						
							2007-02-25 05:34:32 +00:00  
				
					
						
							
							
								 
						
							
								debcb5530c 
								
							 
						 
						
							
							
								
								Fix a spelling error  
							
							... 
							
							
							
							llvm-svn: 33556 
							
						 
						
							2007-01-26 22:40:50 +00:00  
				
					
						
							
							
								 
						
							
								48850c10c0 
								
							 
						 
						
							
							
								
								This is a general clean up of the PowerPC ABI.  Address several problems and  
							
							... 
							
							
							
							bugs including making sure that the TOS links back to the previous frame,
that the maximum call frame size is not included twice when using frame
pointers, no longer growing the frame on calls, double storing of SP and
a cleaner/faster dynamic alloca.
llvm-svn: 31792 
							
						 
						
							2006-11-16 22:43:37 +00:00  
				
					
						
							
							
								 
						
							
								b15000736c 
								
							 
						 
						
							
							
								
								Rename ISD::MemOpAddrMode to ISD::MemIndexedMode  
							
							... 
							
							
							
							llvm-svn: 31595 
							
						 
						
							2006-11-09 17:55:04 +00:00  
				
					
						
							
							
								 
						
							
								a801fcedd3 
								
							 
						 
						
							
							
								
								Refactor all the addressing mode selection stuff into the isel lowering  
							
							... 
							
							
							
							class, where it can be used for preinc formation.
llvm-svn: 31536 
							
						 
						
							2006-11-08 02:15:41 +00:00  
				
					
						
							
							
								 
						
							
								584a11ae22 
								
							 
						 
						
							
							
								
								Implement the getRegForInlineAsmConstraint method for PPC.  With recent  
							
							... 
							
							
							
							sdisel changes, this eliminates a ton of copies around common inline asms.
For example:
int test2(int Y, int X) {
  asm("foo %0, %1" : "=r"(X): "r"(X));
  return X;
}
now compiles to:
_test2:
        foo r3, r4
        blr
instead of:
_test2:
        mr r2, r4
        foo r2, r2
        mr r3, r2
        blr
GCC produces:
_test2:
        foo r4, r4
        mr r3,r4
        blr
llvm-svn: 31367 
							
						 
						
							2006-11-02 01:44:04 +00:00  
				
					
						
							
							
								 
						
							
								8c6949e5b2 
								
							 
						 
						
							
							
								
								Change the prototype for TargetLowering::isOperandValidForConstraint  
							
							... 
							
							
							
							llvm-svn: 31318 
							
						 
						
							2006-10-31 19:40:43 +00:00  
				
					
						
							
							
								 
						
							
								e7141c8be6 
								
							 
						 
						
							
							
								
								For PR387:  
							
							... 
							
							
							
							Close out this long standing bug by removing the remaining overloaded
virtual functions in LLVM. The -Woverloaded-virtual option is now turned on.
llvm-svn: 29934 
							
						 
						
							2006-08-28 01:02:49 +00:00  
				
					
						
							
							
								 
						
							
								a7976d329e 
								
							 
						 
						
							
							
								
								Implement Regression/CodeGen/PowerPC/bswap-load-store.ll by folding bswaps  
							
							... 
							
							
							
							into i16/i32 load/stores.
llvm-svn: 29089 
							
						 
						
							2006-07-10 20:56:58 +00:00  
				
					
						
							
							
								 
						
							
								eb755fc1b3 
								
							 
						 
						
							
							
								
								Make PPC call lowering more aggressive, making the isel matching code simple  
							
							... 
							
							
							
							enough to be autogenerated.
llvm-svn: 28354 
							
						 
						
							2006-05-17 19:00:46 +00:00  
				
					
						
							
							
								 
						
							
								aa40ec1b32 
								
							 
						 
						
							
							
								
								Instead of implementing LowerCallTo directly, let the default impl produce an  
							
							... 
							
							
							
							ISD::CALL node, then custom lower that.  This means that we only have to handle
LEGAL call operands/results, not every possible type.  This allows us to
simplify the call code, shrinking it by about 1/3.
llvm-svn: 28339 
							
						 
						
							2006-05-16 22:56:08 +00:00  
				
					
						
							
							
								 
						
							
								4302e8fb67 
								
							 
						 
						
							
							
								
								Switch the PPC backend over to using FORMAL_ARGUMENTS for formal argument  
							
							... 
							
							
							
							handling.  This makes the lower argument code significantly simpler (we
only need to handle legal argument types).
Incidentally, this also implements support for vector argument registers,
so long as they are not on the stack.
llvm-svn: 28331 
							
						 
						
							2006-05-16 18:18:50 +00:00  
				
					
						
							
							
								 
						
							
								9754d142a4 
								
							 
						 
						
							
							
								
								Implement an important entry from README_ALTIVEC:  
							
							... 
							
							
							
							If an altivec predicate compare is used immediately by a branch, don't
use a (serializing) MFCR instruction to read the CR6 register, which requires
a compare to get it back to CR's.  Instead, just branch on CR6 directly. :)
For example, for:
void foo2(vector float *A, vector float *B) {
  if (!vec_any_eq(*A, *B))
    *B = (vector float){0,0,0,0};
}
We now generate:
_foo2:
        mfspr r2, 256
        oris r5, r2, 12288
        mtspr 256, r5
        lvx v2, 0, r4
        lvx v3, 0, r3
        vcmpeqfp. v2, v3, v2
        bne cr6, LBB1_2 ; UnifiedReturnBlock
LBB1_1: ; cond_true
        vxor v2, v2, v2
        stvx v2, 0, r4
        mtspr 256, r2
        blr
LBB1_2: ; UnifiedReturnBlock
        mtspr 256, r2
        blr
instead of:
_foo2:
        mfspr r2, 256
        oris r5, r2, 12288
        mtspr 256, r5
        lvx v2, 0, r4
        lvx v3, 0, r3
        vcmpeqfp. v2, v3, v2
        mfcr r3, 2
        rlwinm r3, r3, 27, 31, 31
        cmpwi cr0, r3, 0
        beq cr0, LBB1_2 ; UnifiedReturnBlock
LBB1_1: ; cond_true
        vxor v2, v2, v2
        stvx v2, 0, r4
        mtspr 256, r2
        blr
LBB1_2: ; UnifiedReturnBlock
        mtspr 256, r2
        blr
This implements CodeGen/PowerPC/vec_br_cmp.ll.
llvm-svn: 27804 
							
						 
						
							2006-04-18 17:59:36 +00:00  
				
					
						
							
							
								 
						
							
								74cf9ff761 
								
							 
						 
						
							
							
								
								Rename get_VSPLI_elt -> get_VSPLTI_elt  
							
							... 
							
							
							
							Canonicalize BUILD_VECTOR's that match VSPLTI's into a single type for each
form, eliminating a bunch of Pat patterns in the .td file and allowing us to
CSE stuff more aggressively.  This implements
PowerPC/buildvec_canonicalize.ll:VSPLTI
llvm-svn: 27614 
							
						 
						
							2006-04-12 17:37:20 +00:00  
				
					
						
							
							
								 
						
							
								d71a1f946d 
								
							 
						 
						
							
							
								
								Change the interface to the predicate that determines if vsplti* can be used.  
							
							... 
							
							
							
							No functionality changes.
llvm-svn: 27536 
							
						 
						
							2006-04-08 06:46:53 +00:00  
				
					
						
							
							
								 
						
							
								a4bbfaed5c 
								
							 
						 
						
							
							
								
								Match vpku[hw]um(x,x).  
							
							... 
							
							
							
							Convert vsldoi(x,x) to work the same way other (x,x) cases work.
llvm-svn: 27467 
							
						 
						
							2006-04-06 22:28:36 +00:00  
				
					
						
							
							
								 
						
							
								f38e033270 
								
							 
						 
						
							
							
								
								Add support for matching vmrg(x,x) patterns  
							
							... 
							
							
							
							llvm-svn: 27463 
							
						 
						
							2006-04-06 22:02:42 +00:00  
				
					
						
							
							
								 
						
							
								d1dcb52093 
								
							 
						 
						
							
							
								
								Pattern match vmrg* instructions, which are now lowered by the CFE into shuffles.  
							
							... 
							
							
							
							llvm-svn: 27457 
							
						 
						
							2006-04-06 21:11:54 +00:00  
				
					
						
							
							
								 
						
							
								1d33819194 
								
							 
						 
						
							
							
								
								Support pattern matching vsldoi(x,y) and vsldoi(x,x), which allows the f.e. to  
							
							... 
							
							
							
							lower it and LLVM to have one fewer intrinsic.  This implements
CodeGen/PowerPC/vec_shuffle.ll
llvm-svn: 27450 
							
						 
						
							2006-04-06 18:26:28 +00:00  
				
					
						
							
							
								 
						
							
								e8b83b4206 
								
							 
						 
						
							
							
								
								Compile the vpkuhum/vpkuwum intrinsics into vpkuhum/vpkuwum instead of into  
							
							... 
							
							
							
							vperm with a perm mask lvx'd from the constant pool.
llvm-svn: 27448 
							
						 
						
							2006-04-06 17:23:16 +00:00  
				
					
						
							
							
								 
						
							
								95c7adc7cb 
								
							 
						 
						
							
							
								
								Ask legalize to promote all vector shuffles to be v16i8 instead of having to  
							
							... 
							
							
							
							handle all 4 PPC vector types.   This simplifies the matching code and allows
us to eliminate a bunch of patterns.  This also adds cases we were missing,
such as CodeGen/PowerPC/vec_splat.ll:splat_h.
llvm-svn: 27400 
							
						 
						
							2006-04-04 17:25:31 +00:00  
				
					
						
							
							
								 
						
							
								c5287c0ece 
								
							 
						 
						
							
							
								
								Inform the dag combiner that the predicate compares only return a low bit.  
							
							... 
							
							
							
							llvm-svn: 27359 
							
						 
						
							2006-04-02 06:26:07 +00:00  
				
					
						
							
							
								 
						
							
								d7495ae7e9 
								
							 
						 
						
							
							
								
								Lower vector compares to VCMP nodes, just like we lower vector comparison  
							
							... 
							
							
							
							predicates to VCMPo nodes.
llvm-svn: 27285 
							
						 
						
							2006-03-31 05:13:27 +00:00  
				
					
						
							
							
								 
						
							
								cb5ec07cc3 
								
							 
						 
						
							
							
								
								Use normal lvx for scalar_to_vector instead of lve*x.  They do the exact  
							
							... 
							
							
							
							same thing and we have a dag node for the former.
llvm-svn: 27205 
							
						 
						
							2006-03-28 01:43:22 +00:00  
				
					
						
							
							
								 
						
							
								6961fc76bb 
								
							 
						 
						
							
							
								
								Codegen vector predicate compares.  
							
							... 
							
							
							
							llvm-svn: 27151 
							
						 
						
							2006-03-26 10:06:40 +00:00  
				
					
						
							
							
								 
						
							
								b1ddc988af 
								
							 
						 
						
							
							
								
								Remove PPC:isZeroVector, use ISD::isBuildVectorAllZeros instead  
							
							... 
							
							
							
							llvm-svn: 27149 
							
						 
						
							2006-03-26 09:52:32 +00:00  
				
					
						
							
							
								 
						
							
								2771e2c960 
								
							 
						 
						
							
							
								
								Codegen things like:  
							
							... 
							
							
							
							<int -1, int -1, int -1, int -1>
and
 <int 65537, int 65537, int 65537, int 65537>
Using things like:
  vspltisb v0, -1
and:
  vspltish v0, 1
instead of using constant pool loads.
This implements CodeGen/PowerPC/vec_splat.ll:splat_imm_i{32|16}.
llvm-svn: 27106 
							
						 
						
							2006-03-25 06:12:06 +00:00  
				
					
						
							
							
								 
						
							
								ab882abce8 
								
							 
						 
						
							
							
								
								add support for using vxor to build zero vectors.  This implements  
							
							... 
							
							
							
							Regression/CodeGen/PowerPC/vec_zero.ll
llvm-svn: 27059 
							
						 
						
							2006-03-24 07:48:08 +00:00  
				
					
						
							
							
								 
						
							
								4a66d69433 
								
							 
						 
						
							
							
								
								When possible, custom lower 32-bit SINT_TO_FP to this:  
							
							... 
							
							
							
							_foo2:
        extsw r2, r3
        std r2, -8(r1)
        lfd f0, -8(r1)
        fcfid f0, f0
        frsp f1, f0
        blr
instead of this:
_foo2:
        lis r2, ha16(LCPI2_0)
        lis r4, 17200
        xoris r3, r3, 32768
        stw r3, -4(r1)
        stw r4, -8(r1)
        lfs f0, lo16(LCPI2_0)(r2)
        lfd f1, -8(r1)
        fsub f0, f1, f0
        frsp f1, f0
        blr
This speeds up Misc/pi from 2.44s->2.09s with LLC and from 3.01->2.18s
with llcbeta (16.7% and 38.1% respectively).
llvm-svn: 26943 
							
						 
						
							2006-03-22 05:30:33 +00:00  
				
					
						
							
							
								 
						
							
								ffc475689b 
								
							 
						 
						
							
							
								
								fix duplicate definition errors  
							
							... 
							
							
							
							llvm-svn: 26896 
							
						 
						
							2006-03-20 06:33:01 +00:00  
				
					
						
							
							
								 
						
							
								382f356bd9 
								
							 
						 
						
							
							
								
								Check in some intermediate code that adds a skeleton for  matching vsplt*  
							
							... 
							
							
							
							instructions
llvm-svn: 26894 
							
						 
						
							2006-03-20 06:15:45 +00:00  
				
					
						
							
							
								 
						
							
								a8713b1ee6 
								
							 
						 
						
							
							
								
								Custom lower arbitrary VECTOR_SHUFFLE's to VPERM.  
							
							... 
							
							
							
							TODO: leave specific ones as VECTOR_SHUFFLE's and turn them into specialized
operations like vsplt*
llvm-svn: 26887 
							
						 
						
							2006-03-20 01:53:53 +00:00  
				
					
						
							
							
								 
						
							
								7e9440a4fc 
								
							 
						 
						
							
							
								
								Custom lower SCALAR_TO_VECTOR into lve*x.  
							
							... 
							
							
							
							llvm-svn: 26868 
							
						 
						
							2006-03-19 06:55:52 +00:00  
				
					
						
							
							
								 
						
							
								2dd2c652b2 
								
							 
						 
						
							
							
								
								Added getTargetLowering() to TargetMachine. Refactored targets to support this.  
							
							... 
							
							
							
							llvm-svn: 26742 
							
						 
						
							2006-03-13 23:20:37 +00:00  
				
					
						
							
							
								 
						
							
								27f5345b1f 
								
							 
						 
						
							
							
								
								Compile this:  
							
							... 
							
							
							
							void foo(float a, int *b) { *b = a; }
to this:
_foo:
        fctiwz f0, f1
        stfiwx f0, 0, r4
        blr
instead of this:
_foo:
        fctiwz f0, f1
        stfd f0, -8(r1)
        lwz r2, -4(r1)
        stw r2, 0(r4)
        blr
This implements CodeGen/PowerPC/stfiwx.ll, and also incidentally does the
right thing for GCC bugzilla 26505.
llvm-svn: 26447 
							
						 
						
							2006-03-01 05:50:56 +00:00  
				
					
						
							
							
								 
						
							
								f418435819 
								
							 
						 
						
							
							
								
								Use a target-specific dag-combine to implement CodeGen/PowerPC/fp-int-fp.ll.  
							
							... 
							
							
							
							llvm-svn: 26445 
							
						 
						
							2006-03-01 04:57:39 +00:00  
				
					
						
							
							
								 
						
							
								7ad77dfc2a 
								
							 
						 
						
							
							
								
								split register class handling from explicit physreg handling.  
							
							... 
							
							
							
							llvm-svn: 26308 
							
						 
						
							2006-02-22 00:56:39 +00:00  
				
					
						
							
							
								 
						
							
								7bb4696dc3 
								
							 
						 
						
							
							
								
								Updates to match change of getRegForInlineAsmConstraint prototype  
							
							... 
							
							
							
							llvm-svn: 26305 
							
						 
						
							2006-02-21 23:11:00 +00:00  
				
					
						
							
							
								 
						
							
								203b2f1288 
								
							 
						 
						
							
							
								
								Implement getConstraintType for PPC.  
							
							... 
							
							
							
							llvm-svn: 26042 
							
						 
						
							2006-02-07 20:16:30 +00:00  
				
					
						
							
							
								 
						
							
								15a6c4c444 
								
							 
						 
						
							
							
								
								Add the simple PPC integer constraints  
							
							... 
							
							
							
							llvm-svn: 26027 
							
						 
						
							2006-02-07 00:47:13 +00:00  
				
					
						
							
							
								 
						
							
								0151361d21 
								
							 
						 
						
							
							
								
								add info about the inline asm register constraints for PPC  
							
							... 
							
							
							
							llvm-svn: 25853 
							
						 
						
							2006-01-31 19:20:21 +00:00  
				
					
						
							
							
								 
						
							
								f424a66524 
								
							 
						 
						
							
							
								
								Use PPCISD::CALL instead of ISD::CALL  
							
							... 
							
							
							
							llvm-svn: 25717 
							
						 
						
							2006-01-27 23:34:02 +00:00  
				
					
						
							
							
								 
						
							
								4d967a4cbb 
								
							 
						 
						
							
							
								
								Make llvm.frame/returnaddr not crash on ppc  
							
							... 
							
							
							
							llvm-svn: 25710 
							
						 
						
							2006-01-27 22:25:06 +00:00  
				
					
						
							
							
								 
						
							
								8c47c3a3b1 
								
							 
						 
						
							
							
								
								Remove TLI.LowerReturnTo, and just let targets custom lower ISD::RET for  
							
							... 
							
							
							
							the same functionality.  This addresses another piece of bug 680.  Next,
on to fixing Alpha VAARG, which I broke last time.
llvm-svn: 25696 
							
						 
						
							2006-01-27 21:09:22 +00:00  
				
					
						
							
							
								 
						
							
								e74795cd70 
								
							 
						 
						
							
							
								
								First part of bug 680:  
							
							... 
							
							
							
							Remove TLI.LowerVA* and replace it with SDNodes that are lowered the same
way as everything else.
llvm-svn: 25606 
							
						 
						
							2006-01-25 18:21:52 +00:00  
				
					
						
							
							
								 
						
							
								347ed8a581 
								
							 
						 
						
							
							
								
								Give PPCISD:: nodes legible names in dumps.  
							
							... 
							
							
							
							llvm-svn: 25166 
							
						 
						
							2006-01-09 23:52:17 +00:00  
				
					
						
							
							
								 
						
							
								b11b8e44fa 
								
							 
						 
						
							
							
								
								Pattern-match return.  Includes gross hack!  
							
							... 
							
							
							
							llvm-svn: 24874 
							
						 
						
							2005-12-20 00:26:01 +00:00  
				
					
						
							
							
								 
						
							
								69caef2b78 
								
							 
						 
						
							
							
								
								Prepare support for AltiVec multiply, divide, and sqrt.  
							
							... 
							
							
							
							llvm-svn: 24700 
							
						 
						
							2005-12-13 22:55:22 +00:00  
				
					
						
							
							
								 
						
							
								fea33f7e64 
								
							 
						 
						
							
							
								
								Use new PPC-specific nodes to represent shifts which require the 6-bit  
							
							... 
							
							
							
							amount handling that PPC provides.  These are generated by the lowering code
and prevents the dag combiner from assuming (rightfully) that the shifts
don't only look at 5 bits.  This fixes a miscompilation of crafty with
the new front-end.
llvm-svn: 24615 
							
						 
						
							2005-12-06 02:10:38 +00:00  
				
					
						
							
							
								 
						
							
								595088aa0f 
								
							 
						 
						
							
							
								
								Add an initial hack at legalizing GlobalAddress into the appropriate nodes  
							
							... 
							
							
							
							on Darwin to remove smarts from the isel.  This is currently disabled by
default (uncomment setOperationAction(ISD::GlobalAddress to enable it).
tblgen needs to become smarter about tglobaladdr nodes and bigger patterns
needed to be added to the .td file.  However, we can currently emit stuff like
this:  :)
        li r2, lo16(L_x$non_lazy_ptr)
        lis r3, ha16(L_x$non_lazy_ptr)
        lwzx r2, r3, r2
The obvious improvements will follow.
llvm-svn: 24390 
							
						 
						
							2005-11-17 07:30:41 +00:00  
				
					
						
							
							
								 
						
							
								78afac2ddd 
								
							 
						 
						
							
							
								
								Add the ability to lower return instructions to TargetLowering.  This  
							
							... 
							
							
							
							allows us to lower legal return types to something else, to meet ABI
requirements (such as that i64 be returned in two i32 regs on Darwin/ppc).
llvm-svn: 23802 
							
						 
						
							2005-10-18 23:23:37 +00:00  
				
					
						
							
							
								 
						
							
								6cca84e43c 
								
							 
						 
						
							
							
								
								More PPC32 -> PPC changes, as well as merging some classes that were  
							
							... 
							
							
							
							redundant after the change.
llvm-svn: 23759 
							
						 
						
							2005-10-16 05:39:50 +00:00  
				
					
						
							
							
								 
						
							
								bfca1ab79d 
								
							 
						 
						
							
							
								
								Rename PowerPC*.h to PPC*.h  
							
							... 
							
							
							
							llvm-svn: 23743 
							
						 
						
							2005-10-14 23:51:18 +00:00  
				
					
						
							
							
								 
						
							
								6095214bf0 
								
							 
						 
						
							
							
								
								Implement i64<->fp using the fctidz/fcfid instructions on PowerPC when we  
							
							... 
							
							
							
							are allowed to generate 64-bit-only PowerPC instructions for 32 bit hosts,
such as the PowerPC 970.
This speeds up 189.lucas from 81.99 to 32.64 seconds.
llvm-svn: 23250 
							
						 
						
							2005-09-06 22:03:27 +00:00  
				
					
						
							
							
								 
						
							
								da2e04c69d 
								
							 
						 
						
							
							
								
								Move FCTIWZ handling out of the instruction selectors and into legalization,  
							
							... 
							
							
							
							getting them out of the business of making stack slots.
llvm-svn: 23180 
							
						 
						
							2005-08-31 21:09:52 +00:00  
				
					
						
							
							
								 
						
							
								9b577f108a 
								
							 
						 
						
							
							
								
								implement SELECT_CC fully for the DAG->DAG isel!  
							
							... 
							
							
							
							llvm-svn: 23101 
							
						 
						
							2005-08-26 21:23:58 +00:00  
				
					
						
							
							
								 
						
							
								b2854fadda 
								
							 
						 
						
							
							
								
								Make fsel emission work with both the pattern and dag-dag selectors, by  
							
							... 
							
							
							
							giving it a non-instruction opcode.  The dag->dag selector used to not
select the operands of the fsel, because it thought that whole tree was
already selected.
llvm-svn: 23091 
							
						 
						
							2005-08-26 20:25:03 +00:00  
				
					
						
							
							
								 
						
							
								f3d06c6417 
								
							 
						 
						
							
							
								
								add initial support for converting select_cc -> fsel in the legalizer  
							
							... 
							
							
							
							instead of in the backend.  This currently handles fsel cases with registers,
but doesn't have the 0.0 and -0.0 optimization enabled yet.
Once this is finished, special hack for fp immediates can go away.
llvm-svn: 23075 
							
						 
						
							2005-08-26 00:52:45 +00:00  
				
					
						
							
							
								 
						
							
								f22556d3ad 
								
							 
						 
						
							
							
								
								Pull the LLVM -> DAG lowering code out of the pattern selector so that it  
							
							... 
							
							
							
							can be shared with the DAG->DAG selector.
llvm-svn: 22799 
							
						 
						
							2005-08-16 17:14:42 +00:00