reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s

%0 = type { %1 }
%1 = type { %2 }
%2 = type { %3 }
%3 = type { %4 }
%4 = type { %5 }
%5 = type { i64, i64, i8* }
%6 = type { %7, [23 x i8] }
%7 = type { i8 }

@.str.16 = external dso_local unnamed_addr constant [16 x i8], align 1
@.str.17 = external dso_local unnamed_addr constant [12 x i8], align 1
@.str.18 = external dso_local unnamed_addr constant [15 x i8], align 1

declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #0

define void @pr38743(i32 %a0) #1 align 2 {
; CHECK-LABEL: pr38743:
; CHECK:       # %bb.0: # %bb
; CHECK-NEXT:    # kill: def $edi killed $edi def $rdi
; CHECK-NEXT:    decl %edi
; CHECK-NEXT:    jmpq *.LJTI0_0(,%rdi,8)
; CHECK-NEXT:  .LBB0_2: # %bb5
; CHECK-NEXT:    movzwl .str.17+{{.*}}(%rip), %eax
; CHECK-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
; CHECK-NEXT:    movq {{.*}}(%rip), %rax
; CHECK-NEXT:    jmp .LBB0_4
; CHECK-NEXT:  .LBB0_1: # %bb2
; CHECK-NEXT:    movq .str.16+{{.*}}(%rip), %rax
; CHECK-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
; CHECK-NEXT:    movq {{.*}}(%rip), %rax
; CHECK-NEXT:    jmp .LBB0_4
; CHECK-NEXT:  .LBB0_3: # %bb8
; CHECK-NEXT:    movq .str.18+{{.*}}(%rip), %rax
; CHECK-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
; CHECK-NEXT:    movq {{.*}}(%rip), %rax
; CHECK-NEXT:  .LBB0_4: # %bb12
; CHECK-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
; CHECK-NEXT:    movq -{{[0-9]+}}(%rsp), %rax
; CHECK-NEXT:    movq %rax, (%rax)
; CHECK-NEXT:    movb -{{[0-9]+}}(%rsp), %al
; CHECK-NEXT:    movq -{{[0-9]+}}(%rsp), %rcx
; CHECK-NEXT:    movzwl -{{[0-9]+}}(%rsp), %edx
; CHECK-NEXT:    movl -{{[0-9]+}}(%rsp), %esi
; CHECK-NEXT:    movb -{{[0-9]+}}(%rsp), %dil
; CHECK-NEXT:    movb %al, (%rax)
; CHECK-NEXT:    movq %rcx, 1(%rax)
; CHECK-NEXT:    movw %dx, 9(%rax)
; CHECK-NEXT:    movl %esi, 11(%rax)
; CHECK-NEXT:    movb %dil, 15(%rax)
; CHECK-NEXT:    retq
bb:
  %tmp = alloca %0, align 16
  %tmp1 = bitcast %0* %tmp to i8*
  switch i32 %a0, label %bb11 [
    i32 1, label %bb2
    i32 4, label %bb5
    i32 2, label %bb5
    i32 3, label %bb8
  ]

bb2:                                              ; preds = %bb
  %tmp3 = bitcast %0* %tmp to %6*
  %tmp4 = getelementptr inbounds %6, %6* %tmp3, i64 0, i32 1, i64 0
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 %tmp4, i8* align 1 getelementptr inbounds ([16 x i8], [16 x i8]* @.str.16, i64 0, i64 0), i64 15, i1 false)
  br label %bb12

bb5:                                              ; preds = %bb, %bb
  %tmp6 = bitcast %0* %tmp to %6*
  %tmp7 = getelementptr inbounds %6, %6* %tmp6, i64 0, i32 1, i64 0
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 %tmp7, i8* align 1 getelementptr inbounds ([12 x i8], [12 x i8]* @.str.17, i64 0, i64 0), i64 10, i1 false)
  br label %bb12

bb8:                                              ; preds = %bb
  %tmp9 = bitcast %0* %tmp to %6*
  %tmp10 = getelementptr inbounds %6, %6* %tmp9, i64 0, i32 1, i64 0
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 1 %tmp10, i8* align 1 getelementptr inbounds ([15 x i8], [15 x i8]* @.str.18, i64 0, i64 0), i64 14, i1 false)
  br label %bb12

bb11:                                             ; preds = %bb
  unreachable

bb12:                                             ; preds = %bb8, %bb5, %bb2
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 8 undef, i8* nonnull align 16 %tmp1, i64 24, i1 false) #2
  ret void
}

attributes #0 = { argmemonly nounwind }
attributes #1 = { "target-features"="+sse,+sse2,+sse3,+sse4.2" }
attributes #2 = { nounwind }