[LLVMbugs] [Bug 13938] New: Error selecting vduplane instruction for ARM

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed Sep 26 15:16:17 PDT 2012


http://llvm.org/bugs/show_bug.cgi?id=13938

             Bug #: 13938
           Summary: Error selecting vduplane instruction for ARM
           Product: tools
           Version: trunk
          Platform: PC
        OS/Version: Windows NT
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: llc
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: dpeixott at codeaurora.org
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified


Created attachment 9270
  --> http://llvm.org/bugs/attachment.cgi?id=9270
0001-Fix-instruction-selection-for-vduplane-from-v4f32-to

Compiling the following bitcode with  llc -march=arm -mattr=+neon

define <2 x float> @check_f32(<4 x float> %v) nounwind {
  %x = extractelement <4 x float> %v, i32 3
  %1 = insertelement  <2 x float> undef, float %x, i32 0
  %2 = insertelement  <2 x float> %1, float %x, i32 1
  ret <2 x float> %2
}

LLVM ERROR: Cannot select: 0x3753400: v2f32 = ARMISD::VDUPLANE 0x3752700,
0x3752800 [ID=16]
  0x3752700: v4f32 = bitcast 0x3752900 [ORD=1] [ID=15]
    0x3752900: v2f64 = ARMISD::BUILD_VECTOR 0x3751ac0, 0x3751fc0 [ID=14]
      0x3751ac0: f64 = ARMISD::VMOVDRR 0x37517c0, 0x37519c0 [ORD=1] [ID=12]
        0x37517c0: i32,ch = CopyFromReg 0x371f3b0, 0x37516c0 [ORD=1] [ID=8]
          0x37516c0: i32 = Register %vreg0 [ORD=1] [ID=1]
        0x37519c0: i32,ch = CopyFromReg 0x371f3b0, 0x37518c0 [ORD=1] [ID=9]
          0x37518c0: i32 = Register %vreg1 [ORD=1] [ID=2]
      0x3751fc0: f64 = ARMISD::VMOVDRR 0x3751cc0, 0x3751ec0 [ORD=1] [ID=13]
        0x3751cc0: i32,ch = CopyFromReg 0x371f3b0, 0x3751bc0 [ORD=1] [ID=10]
          0x3751bc0: i32 = Register %vreg2 [ORD=1] [ID=3]
        0x3751ec0: i32,ch = CopyFromReg 0x371f3b0, 0x3751dc0 [ORD=1] [ID=11]
          0x3751dc0: i32 = Register %vreg3 [ORD=1] [ID=4]
  0x3752800: i32 = Constant<3> [ORD=1] [ID=5]
In function: check_f32

The problem is there are no selection patterns for duplicating from a larger
vector into a narrower vector (e.g. from a lane of a Q register into a D
register).

Attached a patch that adds new selection patterns for this case.

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list