[LLVMdev] Help!!!!Help!!!! " LLVM ERROR: Cannot select: 0x9fc9680: i32 = fp32_to_fp16 0x9fc0750 [ID=16] " problem!!!!!!!!!!!!!!!!!!

yalong at multicorewareinc.com yalong at multicorewareinc.com
Thu Jul 10 09:44:43 PDT 2014



    
  




Hi Matt,    Thank you your replying. I try to use  @llvm.convert.to/from.fp16 intrinsics before, I also meet "LLVM ERROR: Cannot select:   fp32_to_fp16" problem, maybe these functions call fptrunc/fpext. Following is detail log:
LLVM ERROR: Cannot select: 0x9fc9680: i32 = fp32_to_fp16 0x9fc0750 [ID=16] 
0x9fc0750: f32,ch = load 0x3aafd68, 0x9fc2a20, 0x9feaab0<LD4[%sunkaddr85033]> [ORD=125117] [ID=15] 
0x9fc2a20: i32 = add 0x9fed880, 0x9fd9ea0 [ORD=125115] [ID=13] 
0x9fed880: i32,ch = CopyFromReg 0x3aafd68, 0x9fbea90 [ORD=125114] [ID=9] 
0x9fbea90: i32 = Register %vreg13999 [ORD=125114] [ID=1] 
0x9fd9ea0: i32 = Constant<80> [ORD=125115] [ID=2] 
0x9feaab0: i32 = undef [ORD=125117] [ID=4] 
In function: internal_function_69 
Command exited with non-zero status 1



yalong at multicorewareinc.com
 From: Matt ArsenaultDate: 2014-07-09 12:51To: yalong at multicorewareinc.com; Kevin QinCC: llvmdevSubject: Re: [LLVMdev] Help!!!!Help!!!! " LLVM ERROR: Cannot select: 0x9fc9680: i32 = fp32_to_fp16 0x9fc0750 [ID=16] " problem!!!!!!!!!!!!!!!!!!
  
    
  
  
    On 07/09/2014 12:41 PM, Matt Arsenault
      wrote:

    
    
      
      On 07/09/2014 03:30 PM, yalong at multicorewareinc.com
        wrote:

      
      
        
            Thank you Kevin!!!
            If I use fptrunc and bitcast realise NEON vcvtt ( I can
          sure, "fptrunc  double %tmp to float" is right, but "fptrunc
          float %tmp to half" is wrong). My target platform is MIPS.
           The command as following:
        

        
        NEON:    
                vcvtt.f16.f32 s2, s0
        

          
        llvm

            Code:
        

            %Vt_2 = load float* %VFP_s0, align 4 

            %Vt3_1 = fptrunc float %Vt_2 to half 

            %Vt4_1 = bitcast half %Vt3_1 to i16 

            %Vt2_2 = bitcast float* %VFP_s2 to <2 x i16>* 

            %Vrti_1 = load <2 x i16>* %Vt2_2, align 4 

            %Vrti_2 = insertelement <2 x i16> %Vrti_1, i16 %Vt4_1,
            i32 1 

            %Vt2_3 = bitcast float* %VFP_s2 to <2 x i16>* 

            store <2 x i16> %Vrti_2, <2 x i16>* %Vt2_3,
            align 4 

          
        

        
        Error Log:
        
          LLVM ERROR: Cannot select: 0x9f554b0: ch = store
            0x9d0f28c, 0x9f5d900, 0x9f54ba8,
            0x9f54b20<ST2[FixedStack0](align=4), trunc to f16>
            [ID=52] 

            0x9f5d900: f32,ch = load 0x9f5e290, 0x9f5dd40,
            0x9f54b20<LD4[%sunkaddr69]> [ORD=1810] [ID=51] 

            0x9f5dd40: i32 = add 0x9f55318, 0x9f5e0f8 [ORD=1808]
            [ID=31] 

            0x9f55318: i32,ch = CopyFromReg 0x9d0f28c, 0x9f6a3a0
            [ORD=1796] [ID=26] 

            0x9f6a3a0: i32 = Register %vreg32 [ORD=1796] [ID=1] 

            0x9f5e0f8: i32 = Constant<64> [ORD=1808] [ID=17] 

            0x9f54b20: i32 = undef [ORD=1797] [ID=6] 

            0x9f54ba8: i32 = FrameIndex<0> [ID=24] 

            0x9f54b20: i32 = undef [ORD=1797] [ID=6] 

            In function: testVCVTT32TO16Function 

          
        
        

        
        

      
      

      I think that support for the half type is only implemented for
      ARM. Last I tried to use it, I found that none of it works even on
      x86, and the current handling of the half conversion SDNodes seem
      to rely on ARM specific assumptions

    
    

    Have you tried using the @llvm.convert.to/from.fp16 intrinsics
    instead?

  


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140710/dd105a5f/attachment.html>


More information about the llvm-dev mailing list