[Mesa-dev] llvmPipe on ARM (CortexA-9)

Stuart Abercrombie sabercrombie at google.com
Wed Apr 18 11:06:41 PDT 2012


I was just looking at this.  The release notes say the "ARM backend
has basic support for integer code", but even that appears to be
broken, at least for vector types.  For the first case of
lp_test_conv, with this IR:

define void @test(<8 x i16>*, <4 x i32>*) {
entry:
  %2 = getelementptr <8 x i16>* %0, i32 0
  %3 = load <8 x i16>* %2
  %4 = shufflevector <8 x i16> %3, <8 x i16> zeroinitializer, <8 x i32>
  %5 = shufflevector <8 x i16> %3, <8 x i16> zeroinitializer, <8 x i32>
  %6 = bitcast <8 x i16> %4 to <4 x i32>
  %7 = bitcast <8 x i16> %5 to <4 x i32>
  %8 = getelementptr <4 x i32>* %1, i32 0
  store <4 x i32> %6, <4 x i32>* %8
  %9 = getelementptr <4 x i32>* %1, i32 1
  store <4 x i32> %7, <4 x i32>* %9
  ret void
}

the x86 backend generates reasonable (SSE) code whereas the ARM
backend generates nonsense:

add r2, r1, r2
andeq r8, r0, r0
add r0, r1, #16
andeq r9, r0, r8
add r2, r1, r2
add r0, r1, r2
bx lr

The other tests fail in various ways, including the error you report,
illegal instructions and hangs.

Comments on llvmdev say the Arm JIT is "unmaintained", "known to be
dead" and "broken in many ways".  See
http://lists.cs.uiuc.edu/pipermail/llvmdev/2011-November/045694.html
and http://lists.cs.uiuc.edu/pipermail/llvmdev/2012-February/047654.html.

Until the MC version of the JIT appears it doesn't look as if llvmpipe
will work on Arm.

Stuart


More information about the mesa-dev mailing list