[AArch64] Removed unused i8 type from FPR8 register class.

The i8 type is not registered with any register class.
This causes a segmentation fault in MachineLICM::getRegisterClassIDAndCost.

The code selects the first type associated with register class FPR8,
which happens to be i8.
It uses this type (i8) to get the representative class pointer, which is 0.
It then uses this pointer to access a field, resulting in segmentation fault.

Since i8 type is not being used for printing any neon instruction
we can safely remove it.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200046 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Ana Pazos 2014-01-24 22:36:53 +00:00
parent dbba2eb82f
commit 08f6677a7f
2 changed files with 48 additions and 1 deletions

View File

@ -146,7 +146,7 @@ foreach Index = 0-31 in {
}
def FPR8 : RegisterClass<"AArch64", [i8, v1i8], 8,
def FPR8 : RegisterClass<"AArch64", [v1i8], 8,
(sequence "B%u", 0, 31)> {
}

View File

@ -0,0 +1,47 @@
; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon
; Bug: i8 type in FRP8 register but not registering with register class causes segmentation fault.
; Fix: Removed i8 type from FPR8 register class.
define void @test_concatvector_v8i8() {
entry.split:
br i1 undef, label %if.then, label %if.end
if.then: ; preds = %entry.split
unreachable
if.end: ; preds = %entry.split
br i1 undef, label %if.then9, label %if.end18
if.then9: ; preds = %if.end
unreachable
if.end18: ; preds = %if.end
br label %for.body
for.body: ; preds = %for.inc, %if.end18
br i1 false, label %if.then30, label %for.inc
if.then30: ; preds = %for.body
unreachable
for.inc: ; preds = %for.body
br i1 undef, label %for.end, label %for.body
for.end: ; preds = %for.inc
br label %for.body77
for.body77: ; preds = %for.body77, %for.end
br i1 undef, label %for.end106, label %for.body77
for.end106: ; preds = %for.body77
br i1 undef, label %for.body130.us.us, label %stmt.for.body130.us.us
stmt.for.body130.us.us: ; preds = %stmt.for.body130.us.us, %for.end106
%_p_splat.us = shufflevector <1 x i8> zeroinitializer, <1 x i8> undef, <8 x i32> zeroinitializer
store <8 x i8> %_p_splat.us, <8 x i8>* undef, align 1
br label %stmt.for.body130.us.us
for.body130.us.us: ; preds = %for.body130.us.us, %for.end106
br label %for.body130.us.us
}