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

Ana Pazos apazos at codeaurora.org
Fri Jan 24 14:36:53 PST 2014


Author: apazos
Date: Fri Jan 24 16:36:53 2014
New Revision: 200046

URL: http://llvm.org/viewvc/llvm-project?rev=200046&view=rev
Log:
[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.


Added:
    llvm/trunk/test/CodeGen/AArch64/concatvector-v8i8-bug.ll
Modified:
    llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.td

Modified: llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.td?rev=200046&r1=200045&r2=200046&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.td (original)
+++ llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.td Fri Jan 24 16:36:53 2014
@@ -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)> {
 }
 

Added: llvm/trunk/test/CodeGen/AArch64/concatvector-v8i8-bug.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/concatvector-v8i8-bug.ll?rev=200046&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/AArch64/concatvector-v8i8-bug.ll (added)
+++ llvm/trunk/test/CodeGen/AArch64/concatvector-v8i8-bug.ll Fri Jan 24 16:36:53 2014
@@ -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
+}
+





More information about the llvm-commits mailing list