[llvm] r195455 - [mips][msa] Fix corner case for integer constant splats with undef values.

Daniel Sanders Daniel.Sanders at imgtec.com
Mon Nov 25 08:06:51 PST 2013


Hi Chris,

There doesn't seem to be an owner for the MIPS backend in CODE_OWNERS.txt. Can you approve merging this commit (and the two corrections r195456, r195469 to fix a typo and missing testcase) to the release_34 branch?

Just to give you the context, it's part of the following series of patches:
* r195343 - [mips][msa/dsp] Only do DSP combines if DSP is enabled.
* r195364 - [mips][msa] Fix a corner case in performORCombine() when combining nodes into VSELECT. 
* r195444 - [mips][msa] Float vector constants cannot use ldi.[wd] directly. Bitcast from the appropriate integer vector type.
* r195455, r195456, and r195469 - [mips][msa] Fix corner case for integer constant splats with undef values. 
Once these four patches are committed, an llvm-stress + llc loop can run for over 15 hours without llc crashing (up from a previous best of ~20 seconds).

> -----Original Message-----
> From: Daniel Sanders
> Sent: 22 November 2013 15:53
> To: Daniel Sanders; llvm-commits at cs.uiuc.edu
> Subject: RE: [llvm] r195455 - [mips][msa] Fix corner case for integer constant
> splats with undef values.
> 
> It seems I forgot to commit the test case in this commit. Committed it in
> r195469.
> 
> > -----Original Message-----
> > From: llvm-commits-bounces at cs.uiuc.edu [mailto:llvm-commits-
> > bounces at cs.uiuc.edu] On Behalf Of Daniel Sanders
> > Sent: 22 November 2013 13:14
> > To: llvm-commits at cs.uiuc.edu
> > Subject: [llvm] r195455 - [mips][msa] Fix corner case for integer
> > constant splats with undef values.
> >
> > Author: dsanders
> > Date: Fri Nov 22 07:14:06 2013
> > New Revision: 195455
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=195455&view=rev
> > Log:
> > [mips][msa] Fix corner case for integer constant splats with undef values.
> >
> > lowerBUILD_VECTOR() was treating integer constant splats as being
> > legal regardless of whether they had undef values. This caused
> > instruction selection failures when the undefs were legalized to zero,
> > making the constant non-splat.
> >
> > Fixed this by requiring HasAnyUndef to be false for a integer constant
> > splat to be legal. If it is true, a new node is generated with the
> > undefs replaced with the necessary values to remain a splat.
> >
> >
> > Modified:
> >     llvm/trunk/lib/Target/Mips/MipsSEISelLowering.cpp
> >
> > Modified: llvm/trunk/lib/Target/Mips/MipsSEISelLowering.cpp
> > URL: http://llvm.org/viewvc/llvm-
> >
> project/llvm/trunk/lib/Target/Mips/MipsSEISelLowering.cpp?rev=195455&r
> > 1
> > =195454&r2=195455&view=diff
> >
> ==========================================================
> > ====================
> > --- llvm/trunk/lib/Target/Mips/MipsSEISelLowering.cpp (original)
> > +++ llvm/trunk/lib/Target/Mips/MipsSEISelLowering.cpp Fri Nov 22
> > +++ 07:14:06 2013
> > @@ -2211,8 +2211,9 @@ SDValue MipsSETargetLowering::lowerBUILD
> >
> >      // If the value fits into a simm10 then we can use ldi.[bhwd]
> >      // However, if it isn't an integer type we will have to bitcast from an
> > -    // integer type first.
> > -    if (ResTy.isInteger() && SplatValue.isSignedIntN(10))
> > +    // integer type first. Also, it there are any undefs, we must lower them
> > +    // to defined values first.
> > +    if (ResTy.isInteger() && !HasAnyUndefs &&
> > + SplatValue.isSignedIntN(10))
> >        return Op;
> >
> >      EVT ViaVecTy;
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits





More information about the llvm-commits mailing list