[llvm-bugs] [Bug 39685] New: Inserting an element to an undef vector

via llvm-bugs llvm-bugs at lists.llvm.org
Thu Nov 15 19:19:40 PST 2018


            Bug ID: 39685
           Summary: Inserting an element to an undef vector
           Product: libraries
           Version: trunk
          Hardware: All
                OS: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: Backend: WebAssembly
          Assignee: unassignedbugs at nondot.org
          Reporter: aheejin at gmail.com
                CC: llvm-bugs at lists.llvm.org

target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"                          
target triple = "wasm32-unknown-unknown"                                        

define <16 x i8> @test(i8 %x) {                                                 
  %v = insertelement <16 x i8> undef, i8 %x, i32 0                              
  ret <16 x i8> %v                                                              

If you compile the code above with the command
llc -asm-verbose=false -wasm-keep-registers -wasm-disable-explicit-locals
-mattr=+simd128,+sign-ext test.ll

The result will be like
  .param    i32                                                                 
  .result   v128                                                                
  i8x16.splat  $push0=, $0                                                      
  i8x16.replace_lane  $push1=, $pop0, 1, $0                                     
  i8x16.replace_lane  $push2=, $pop1, 2, $0                                     
  i8x16.replace_lane  $push3=, $pop2, 3, $0                                     
  i8x16.replace_lane  $push4=, $pop3, 4, $0                                     
  i8x16.replace_lane  $push5=, $pop4, 5, $0                                     
  i8x16.replace_lane  $push6=, $pop5, 6, $0                                     
  i8x16.replace_lane  $push7=, $pop6, 7, $0                                     
  i8x16.replace_lane  $push8=, $pop7, 8, $0                                     
  i8x16.replace_lane  $push9=, $pop8, 9, $0                                     
  i8x16.replace_lane  $push10=, $pop9, 10, $0                                   
  i8x16.replace_lane  $push11=, $pop10, 11, $0                                  
  i8x16.replace_lane  $push12=, $pop11, 12, $0                                  
  i8x16.replace_lane  $push13=, $pop12, 13, $0                                  
  i8x16.replace_lane  $push14=, $pop13, 14, $0                                  
  i8x16.replace_lane  $push15=, $pop14, 15, $0                                  

What does wasm backend do for undef elements? Does it initialize them to zero?

But anyway here, doesn't the first instruction, splat, set all elements to the
value give by the argument? I'm not sure why all 'replace_lane's below try to
set each element one by one with the same value, which was supposed to be done
anyway by the first splat instruction.

You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20181116/6bdb6155/attachment-0001.html>

More information about the llvm-bugs mailing list