[llvm-bugs] [Bug 42803] New: bad vector codegen

via llvm-bugs llvm-bugs at lists.llvm.org
Sun Jul 28 16:37:00 PDT 2019


https://bugs.llvm.org/show_bug.cgi?id=42803

            Bug ID: 42803
           Summary: bad vector codegen
           Product: new-bugs
           Version: 8.0
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: new bugs
          Assignee: unassignedbugs at nondot.org
          Reporter: slandden at gmail.com
                CC: htmldeveloper at gmail.com, llvm-bugs at lists.llvm.org

Created attachment 22304
  --> https://bugs.llvm.org/attachment.cgi?id=22304&action=edit
llvm-ir

Using llvm 8 (Ubuntu Disco, 8.0.0-3 (tags/RELEASE_800/final)) The following zig
program:

pub export fn _start() void {
            var a: [3]bool = [_]bool{ false, true, false};
            var x2: @Vector(3, bool) = a;
if (x2[1] != true) unreachable;
}
const builtin = @import("builtin");
pub fn panic(msg: []const u8, error_return_trace: ?*builtin.StackTrace)
noreturn {
while (true) {}
}


compiles to this llvm-ir (full file included)


@0 = internal unnamed_addr constant [3 x i1] [i1 false, i1 true, i1 false],
align 1

; Function Attrs: nobuiltin nounwind
define void @_start() #2 !dbg !136 {
Entry:
  %a = alloca [3 x i1], align 1
  %x2 = alloca <3 x i1>, align 4
  %0 = bitcast [3 x i1]* %a to i8*, !dbg !147
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %0, i8* align 1 bitcast ([3
x i1]* @0 to i8*), i64 3, i1 false), !dbg !147
  call void @llvm.dbg.declare(metadata [3 x i1]* %a, metadata !140, metadata
!DIExpression()), !dbg !147
  %1 = load [3 x i1], [3 x i1]* %a, !dbg !148
  %vector_to_array = extractvalue [3 x i1] %1, 0, !dbg !148
  %2 = insertelement <3 x i1> undef, i1 %vector_to_array, i32 0, !dbg !148
  %vector_to_array1 = extractvalue [3 x i1] %1, 1, !dbg !148
  %3 = insertelement <3 x i1> %2, i1 %vector_to_array1, i32 1, !dbg !148
  %vector_to_array2 = extractvalue [3 x i1] %1, 2, !dbg !148
  %4 = insertelement <3 x i1> %3, i1 %vector_to_array2, i32 2, !dbg !148
  store <3 x i1> %4, <3 x i1>* %x2, align 4, !dbg !149
  call void @llvm.dbg.declare(metadata <3 x i1>* %x2, metadata !145, metadata
!DIExpression()), !dbg !149
  %5 = load <3 x i1>, <3 x i1>* %x2, align 4, !dbg !150
  %6 = extractelement <3 x i1> %5, i32 1, !dbg !150
  %7 = icmp ne i1 %6, true, !dbg !151
  br i1 %7, label %Then, label %Else, !dbg !152

Then:                                             ; preds = %Entry
  tail call fastcc void @panic(%"[]u8"* @2, %builtin.StackTrace* null), !dbg
!153
  unreachable, !dbg !153

Else:                                             ; preds = %Entry
  br label %EndIf, !dbg !152

EndIf:                                            ; preds = %Else
  ret void, !dbg !154
}

Which produces the following x86_64 (disassembled)

Dump of assembler code for function _start:
   0x0000000000201010 <+0>:     push   %rbp
   0x0000000000201011 <+1>:     mov    %rsp,%rbp
=> 0x0000000000201014 <+4>:     sub    $0x10,%rsp
   0x0000000000201018 <+8>:     mov    -0xef8(%rip),%al        # 0x200126
<__unnamed_1+2>
   0x000000000020101e <+14>:    mov    %al,-0x2(%rbp)
   0x0000000000201021 <+17>:    mov    -0xf04(%rip),%cx        # 0x200124
<__unnamed_1>
   0x0000000000201028 <+24>:    mov    %cx,-0x4(%rbp)
   0x000000000020102c <+28>:    mov    -0x2(%rbp),%al
   0x000000000020102f <+31>:    mov    -0x4(%rbp),%dl
   0x0000000000201032 <+34>:    mov    -0x3(%rbp),%sil
   0x0000000000201036 <+38>:    add    %sil,%sil
   0x0000000000201039 <+41>:    or     %sil,%dl
   0x000000000020103c <+44>:    shl    $0x2,%al
   0x000000000020103f <+47>:    or     %al,%dl
   0x0000000000201041 <+49>:    and    $0x7,%dl
   0x0000000000201044 <+52>:    mov    %dl,-0xc(%rbp)
   0x0000000000201047 <+55>:    mov    -0xc(%rbp),%al
   0x000000000020104a <+58>:    mov    %al,-0x8(%rbp)
   0x000000000020104d <+61>:    mov    -0x8(%rbp),%al
   0x0000000000201050 <+64>:    and    $0x1,%al
   0x0000000000201052 <+66>:    neg    %al
   0x0000000000201054 <+68>:    test   $0x1,%al
   0x0000000000201056 <+70>:    jne    0x20106d <_start+93>
   0x0000000000201058 <+72>:    jmp    0x20105a <_start+74>
   0x000000000020105a <+74>:    xor    %eax,%eax
   0x000000000020105c <+76>:    mov    %eax,%esi
   0x000000000020105e <+78>:    movabs $0x200140,%rdi
   0x0000000000201068 <+88>:    callq  0x201000 <panic>
   0x000000000020106d <+93>:    jmp    0x20106f <_start+95>
   0x000000000020106f <+95>:    add    $0x10,%rsp
   0x0000000000201073 <+99>:    pop    %rbp
   0x0000000000201074 <+100>:   retq

-- 
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/20190728/84c42446/attachment.html>


More information about the llvm-bugs mailing list