1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s 3 4%0 = type { %1 } 5%1 = type { %2 } 6%2 = type { %3 } 7%3 = type { %4 } 8%4 = type { %5 } 9%5 = type { i64, i64, i8* } 10%6 = type { %7, [23 x i8] } 11%7 = type { i8 } 12 13@.str.16 = external dso_local unnamed_addr constant [16 x i8], align 1 14@.str.17 = external dso_local unnamed_addr constant [12 x i8], align 1 15@.str.18 = external dso_local unnamed_addr constant [15 x i8], align 1 16 17declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #0 18 19define void @pr38743(i32 %a0) #1 align 2 { 20; CHECK-LABEL: pr38743: 21; CHECK: # %bb.0: # %bb 22; CHECK-NEXT: # kill: def $edi killed $edi def $rdi 23; CHECK-NEXT: decl %edi 24; CHECK-NEXT: jmpq *.LJTI0_0(,%rdi,8) 25; CHECK-NEXT: .LBB0_2: # %bb5 26; CHECK-NEXT: movzwl .str.17+{{.*}}(%rip), %eax 27; CHECK-NEXT: movw %ax, -{{[0-9]+}}(%rsp) 28; CHECK-NEXT: movq {{.*}}(%rip), %rax 29; CHECK-NEXT: jmp .LBB0_4 30; CHECK-NEXT: .LBB0_1: # %bb2 31; CHECK-NEXT: movq .str.16+{{.*}}(%rip), %rax 32; CHECK-NEXT: movq %rax, -{{[0-9]+}}(%rsp) 33; CHECK-NEXT: movq {{.*}}(%rip), %rax 34; CHECK-NEXT: jmp .LBB0_4 35; CHECK-NEXT: .LBB0_3: # %bb8 36; CHECK-NEXT: movq .str.18+{{.*}}(%rip), %rax 37; CHECK-NEXT: movq %rax, -{{[0-9]+}}(%rsp) 38; CHECK-NEXT: movq {{.*}}(%rip), %rax 39; CHECK-NEXT: .LBB0_4: # %bb12 40; CHECK-NEXT: movq %rax, -{{[0-9]+}}(%rsp) 41; CHECK-NEXT: movq -{{[0-9]+}}(%rsp), %rax 42; CHECK-NEXT: movq %rax, (%rax) 43; CHECK-NEXT: movb -{{[0-9]+}}(%rsp), %al 44; CHECK-NEXT: movq -{{[0-9]+}}(%rsp), %rcx 45; CHECK-NEXT: movzwl -{{[0-9]+}}(%rsp), %edx 46; CHECK-NEXT: movl -{{[0-9]+}}(%rsp), %esi 47; CHECK-NEXT: movb -{{[0-9]+}}(%rsp), %dil 48; CHECK-NEXT: movb %al, (%rax) 49; CHECK-NEXT: movq %rcx, 1(%rax) 50; CHECK-NEXT: movw %dx, 9(%rax) 51; CHECK-NEXT: movl %esi, 11(%rax) 52; CHECK-NEXT: movb %dil, 15(%rax) 53; CHECK-NEXT: retq 54bb: 55 %tmp = alloca %0, align 16 56 %tmp1 = bitcast %0* %tmp to i8* 57 switch i32 %a0, label %bb11 [ 58 i32 1, label %bb2 59 i32 4, label %bb5 60 i32 2, label %bb5 61 i32 3, label %bb8 62 ] 63 64bb2: ; preds = %bb 65 %tmp3 = bitcast %0* %tmp to %6* 66 %tmp4 = getelementptr inbounds %6, %6* %tmp3, i64 0, i32 1, i64 0 67 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) 68 br label %bb12 69 70bb5: ; preds = %bb, %bb 71 %tmp6 = bitcast %0* %tmp to %6* 72 %tmp7 = getelementptr inbounds %6, %6* %tmp6, i64 0, i32 1, i64 0 73 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) 74 br label %bb12 75 76bb8: ; preds = %bb 77 %tmp9 = bitcast %0* %tmp to %6* 78 %tmp10 = getelementptr inbounds %6, %6* %tmp9, i64 0, i32 1, i64 0 79 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) 80 br label %bb12 81 82bb11: ; preds = %bb 83 unreachable 84 85bb12: ; preds = %bb8, %bb5, %bb2 86 call void @llvm.memcpy.p0i8.p0i8.i64(i8* nonnull align 8 undef, i8* nonnull align 16 %tmp1, i64 24, i1 false) #2 87 ret void 88} 89 90attributes #0 = { argmemonly nounwind } 91attributes #1 = { "target-features"="+sse,+sse2,+sse3,+sse4.2" } 92attributes #2 = { nounwind } 93