[llvm-commits] [llvm] r141500 - /llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
Cameron Zwarich
zwarich at apple.com
Sat Oct 8 14:25:49 PDT 2011
Could this sort of thing be checked statically?
Sent from my iPhone
On Oct 8, 2011, at 1:20 PM, Jakob Stoklund Olesen <stoklund at 2pi.dk> wrote:
> Author: stoklund
> Date: Sat Oct 8 15:20:03 2011
> New Revision: 141500
>
> URL: http://llvm.org/viewvc/llvm-project?rev=141500&view=rev
> Log:
> Prevent potential NOREX bug.
>
> A GR8_NOREX virtual register is created when extrating a sub_8bit_hi
> sub-register:
>
> %vreg2<def> = COPY %vreg1:sub_8bit_hi; GR8_NOREX:%vreg2 %GR64_ABCD:%vreg1
> TEST8ri_NOREX %vreg2, 1, %EFLAGS<imp-def>; GR8_NOREX:%vreg2
>
> If such a live range is ever split, its register class must not be
> inflated to GR8. The sub-register copy can only target GR8_NOREX.
>
> I dont have a test case for this theoretical bug.
>
> Modified:
> llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
>
> Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp?rev=141500&r1=141499&r2=141500&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp Sat Oct 8 15:20:03 2011
> @@ -246,6 +246,17 @@
>
> const TargetRegisterClass*
> X86RegisterInfo::getLargestLegalSuperClass(const TargetRegisterClass *RC) const{
> + // Don't allow super-classes of GR8_NOREX. This class is only used after
> + // extrating sub_8bit_hi sub-registers. The H sub-registers cannot be copied
> + // to the full GR8 register class in 64-bit mode, so we cannot allow the
> + // reigster class inflation.
> + //
> + // The GR8_NOREX class is always used in a way that won't be constrained to a
> + // sub-class, so sub-classes like GR8_ABCD_L are allowed to expand to the
> + // full GR8 class.
> + if (RC == X86::GR8_NOREXRegisterClass)
> + return RC;
> +
> const TargetRegisterClass *Super = RC;
> TargetRegisterClass::sc_iterator I = RC->getSuperClasses();
> do {
>
>
> _______________________________________________
> 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