brintos

brintos / llvm-project-archived public Read only

0
0
Text · 20.3 KiB · f074390 Raw
508 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-linux -mcpu=x86-64 -verify-machineinstrs | FileCheck %s -check-prefix=CHECK3; RUN: llc < %s -mtriple=x86_64-linux -mcpu=x86-64 --x86-disable-avoid-SFB -verify-machineinstrs | FileCheck %s --check-prefix=DISABLED4; RUN: llc < %s -mtriple=x86_64-linux -mcpu=core-avx2 -verify-machineinstrs | FileCheck %s -check-prefix=CHECK-AVX25; RUN: llc < %s -mtriple=x86_64-linux -mcpu=skx -verify-machineinstrs | FileCheck %s -check-prefix=CHECK-AVX5126 7; ModuleID = '../testSFB/testOverlapBlocks.c'8source_filename = "../testSFB/testOverlapBlocks.c"9target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"10target triple = "x86_64-unknown-linux-gnu"11 12; Function Attrs: nounwind uwtable13define dso_local void @test_overlap_1(ptr nocapture %A, i32 %x) local_unnamed_addr #0 {14; CHECK-LABEL: test_overlap_1:15; CHECK:       # %bb.0: # %entry16; CHECK-NEXT:    movl $7, -8(%rdi)17; CHECK-NEXT:    movq -16(%rdi), %rax18; CHECK-NEXT:    movq %rax, (%rdi)19; CHECK-NEXT:    movl -8(%rdi), %eax20; CHECK-NEXT:    movl %eax, 8(%rdi)21; CHECK-NEXT:    movl -4(%rdi), %eax22; CHECK-NEXT:    movl %eax, 12(%rdi)23; CHECK-NEXT:    movslq %esi, %rax24; CHECK-NEXT:    movq %rax, -9(%rdi)25; CHECK-NEXT:    movq %rax, -16(%rdi)26; CHECK-NEXT:    movb $0, -1(%rdi)27; CHECK-NEXT:    movq -16(%rdi), %rax28; CHECK-NEXT:    movq %rax, 16(%rdi)29; CHECK-NEXT:    movl -8(%rdi), %eax30; CHECK-NEXT:    movl %eax, 24(%rdi)31; CHECK-NEXT:    movzwl -4(%rdi), %eax32; CHECK-NEXT:    movw %ax, 28(%rdi)33; CHECK-NEXT:    movzbl -2(%rdi), %eax34; CHECK-NEXT:    movb %al, 30(%rdi)35; CHECK-NEXT:    movzbl -1(%rdi), %eax36; CHECK-NEXT:    movb %al, 31(%rdi)37; CHECK-NEXT:    retq38;39; DISABLED-LABEL: test_overlap_1:40; DISABLED:       # %bb.0: # %entry41; DISABLED-NEXT:    movl $7, -8(%rdi)42; DISABLED-NEXT:    movups -16(%rdi), %xmm043; DISABLED-NEXT:    movups %xmm0, (%rdi)44; DISABLED-NEXT:    movslq %esi, %rax45; DISABLED-NEXT:    movq %rax, -9(%rdi)46; DISABLED-NEXT:    movq %rax, -16(%rdi)47; DISABLED-NEXT:    movb $0, -1(%rdi)48; DISABLED-NEXT:    movups -16(%rdi), %xmm049; DISABLED-NEXT:    movups %xmm0, 16(%rdi)50; DISABLED-NEXT:    retq51;52; CHECK-AVX2-LABEL: test_overlap_1:53; CHECK-AVX2:       # %bb.0: # %entry54; CHECK-AVX2-NEXT:    movl $7, -8(%rdi)55; CHECK-AVX2-NEXT:    movq -16(%rdi), %rax56; CHECK-AVX2-NEXT:    movq %rax, (%rdi)57; CHECK-AVX2-NEXT:    movl -8(%rdi), %eax58; CHECK-AVX2-NEXT:    movl %eax, 8(%rdi)59; CHECK-AVX2-NEXT:    movl -4(%rdi), %eax60; CHECK-AVX2-NEXT:    movl %eax, 12(%rdi)61; CHECK-AVX2-NEXT:    movslq %esi, %rax62; CHECK-AVX2-NEXT:    movq %rax, -9(%rdi)63; CHECK-AVX2-NEXT:    movq %rax, -16(%rdi)64; CHECK-AVX2-NEXT:    movb $0, -1(%rdi)65; CHECK-AVX2-NEXT:    movq -16(%rdi), %rax66; CHECK-AVX2-NEXT:    movq %rax, 16(%rdi)67; CHECK-AVX2-NEXT:    movl -8(%rdi), %eax68; CHECK-AVX2-NEXT:    movl %eax, 24(%rdi)69; CHECK-AVX2-NEXT:    movzwl -4(%rdi), %eax70; CHECK-AVX2-NEXT:    movw %ax, 28(%rdi)71; CHECK-AVX2-NEXT:    movzbl -2(%rdi), %eax72; CHECK-AVX2-NEXT:    movb %al, 30(%rdi)73; CHECK-AVX2-NEXT:    movzbl -1(%rdi), %eax74; CHECK-AVX2-NEXT:    movb %al, 31(%rdi)75; CHECK-AVX2-NEXT:    retq76;77; CHECK-AVX512-LABEL: test_overlap_1:78; CHECK-AVX512:       # %bb.0: # %entry79; CHECK-AVX512-NEXT:    movl $7, -8(%rdi)80; CHECK-AVX512-NEXT:    movq -16(%rdi), %rax81; CHECK-AVX512-NEXT:    movq %rax, (%rdi)82; CHECK-AVX512-NEXT:    movl -8(%rdi), %eax83; CHECK-AVX512-NEXT:    movl %eax, 8(%rdi)84; CHECK-AVX512-NEXT:    movl -4(%rdi), %eax85; CHECK-AVX512-NEXT:    movl %eax, 12(%rdi)86; CHECK-AVX512-NEXT:    movslq %esi, %rax87; CHECK-AVX512-NEXT:    movq %rax, -9(%rdi)88; CHECK-AVX512-NEXT:    movq %rax, -16(%rdi)89; CHECK-AVX512-NEXT:    movb $0, -1(%rdi)90; CHECK-AVX512-NEXT:    movq -16(%rdi), %rax91; CHECK-AVX512-NEXT:    movq %rax, 16(%rdi)92; CHECK-AVX512-NEXT:    movl -8(%rdi), %eax93; CHECK-AVX512-NEXT:    movl %eax, 24(%rdi)94; CHECK-AVX512-NEXT:    movzwl -4(%rdi), %eax95; CHECK-AVX512-NEXT:    movw %ax, 28(%rdi)96; CHECK-AVX512-NEXT:    movzbl -2(%rdi), %eax97; CHECK-AVX512-NEXT:    movb %al, 30(%rdi)98; CHECK-AVX512-NEXT:    movzbl -1(%rdi), %eax99; CHECK-AVX512-NEXT:    movb %al, 31(%rdi)100; CHECK-AVX512-NEXT:    retq101entry:102  %add.ptr = getelementptr inbounds i8, ptr %A, i64 -16103  %add.ptr1 = getelementptr inbounds i8, ptr %A, i64 -8104  store i32 7, ptr %add.ptr1, align 4105  tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %A, ptr nonnull align 4 %add.ptr, i64 16, i1 false)106  %conv = sext i32 %x to i64107  %add.ptr2 = getelementptr inbounds i8, ptr %A, i64 -9108  store i64 %conv, ptr %add.ptr2, align 8109  store i64 %conv, ptr %add.ptr, align 8110  %add.ptr5 = getelementptr inbounds i8, ptr %A, i64 -1111  store i8 0, ptr %add.ptr5, align 1112  %add.ptr6 = getelementptr inbounds i8, ptr %A, i64 16113  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %add.ptr6, ptr nonnull align 4 %add.ptr, i64 16, i1 false)114  ret void115}116 117; Function Attrs: argmemonly nounwind118declare void @llvm.memcpy.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1) #1119 120; Function Attrs: nounwind uwtable121define dso_local void @test_overlap_2(ptr nocapture %A, i32 %x) local_unnamed_addr #0 {122; CHECK-LABEL: test_overlap_2:123; CHECK:       # %bb.0: # %entry124; CHECK-NEXT:    movslq %esi, %rax125; CHECK-NEXT:    movq %rax, -16(%rdi)126; CHECK-NEXT:    movq -16(%rdi), %rcx127; CHECK-NEXT:    movq %rcx, (%rdi)128; CHECK-NEXT:    movq -8(%rdi), %rcx129; CHECK-NEXT:    movq %rcx, 8(%rdi)130; CHECK-NEXT:    movq %rax, -8(%rdi)131; CHECK-NEXT:    movl $7, -12(%rdi)132; CHECK-NEXT:    movl -16(%rdi), %eax133; CHECK-NEXT:    movl %eax, 16(%rdi)134; CHECK-NEXT:    movl -12(%rdi), %eax135; CHECK-NEXT:    movl %eax, 20(%rdi)136; CHECK-NEXT:    movq -8(%rdi), %rax137; CHECK-NEXT:    movq %rax, 24(%rdi)138; CHECK-NEXT:    retq139;140; DISABLED-LABEL: test_overlap_2:141; DISABLED:       # %bb.0: # %entry142; DISABLED-NEXT:    movslq %esi, %rax143; DISABLED-NEXT:    movq %rax, -16(%rdi)144; DISABLED-NEXT:    movups -16(%rdi), %xmm0145; DISABLED-NEXT:    movups %xmm0, (%rdi)146; DISABLED-NEXT:    movq %rax, -8(%rdi)147; DISABLED-NEXT:    movl $7, -12(%rdi)148; DISABLED-NEXT:    movups -16(%rdi), %xmm0149; DISABLED-NEXT:    movups %xmm0, 16(%rdi)150; DISABLED-NEXT:    retq151;152; CHECK-AVX2-LABEL: test_overlap_2:153; CHECK-AVX2:       # %bb.0: # %entry154; CHECK-AVX2-NEXT:    movslq %esi, %rax155; CHECK-AVX2-NEXT:    movq %rax, -16(%rdi)156; CHECK-AVX2-NEXT:    movq -16(%rdi), %rcx157; CHECK-AVX2-NEXT:    movq %rcx, (%rdi)158; CHECK-AVX2-NEXT:    movq -8(%rdi), %rcx159; CHECK-AVX2-NEXT:    movq %rcx, 8(%rdi)160; CHECK-AVX2-NEXT:    movq %rax, -8(%rdi)161; CHECK-AVX2-NEXT:    movl $7, -12(%rdi)162; CHECK-AVX2-NEXT:    movl -16(%rdi), %eax163; CHECK-AVX2-NEXT:    movl %eax, 16(%rdi)164; CHECK-AVX2-NEXT:    movl -12(%rdi), %eax165; CHECK-AVX2-NEXT:    movl %eax, 20(%rdi)166; CHECK-AVX2-NEXT:    movq -8(%rdi), %rax167; CHECK-AVX2-NEXT:    movq %rax, 24(%rdi)168; CHECK-AVX2-NEXT:    retq169;170; CHECK-AVX512-LABEL: test_overlap_2:171; CHECK-AVX512:       # %bb.0: # %entry172; CHECK-AVX512-NEXT:    movslq %esi, %rax173; CHECK-AVX512-NEXT:    movq %rax, -16(%rdi)174; CHECK-AVX512-NEXT:    movq -16(%rdi), %rcx175; CHECK-AVX512-NEXT:    movq %rcx, (%rdi)176; CHECK-AVX512-NEXT:    movq -8(%rdi), %rcx177; CHECK-AVX512-NEXT:    movq %rcx, 8(%rdi)178; CHECK-AVX512-NEXT:    movq %rax, -8(%rdi)179; CHECK-AVX512-NEXT:    movl $7, -12(%rdi)180; CHECK-AVX512-NEXT:    movl -16(%rdi), %eax181; CHECK-AVX512-NEXT:    movl %eax, 16(%rdi)182; CHECK-AVX512-NEXT:    movl -12(%rdi), %eax183; CHECK-AVX512-NEXT:    movl %eax, 20(%rdi)184; CHECK-AVX512-NEXT:    movq -8(%rdi), %rax185; CHECK-AVX512-NEXT:    movq %rax, 24(%rdi)186; CHECK-AVX512-NEXT:    retq187entry:188  %add.ptr = getelementptr inbounds i8, ptr %A, i64 -16189  %conv = sext i32 %x to i64190  store i64 %conv, ptr %add.ptr, align 8191  tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %A, ptr nonnull align 4 %add.ptr, i64 16, i1 false)192  %add.ptr3 = getelementptr inbounds i8, ptr %A, i64 -8193  store i64 %conv, ptr %add.ptr3, align 8194  %add.ptr4 = getelementptr inbounds i8, ptr %A, i64 -12195  store i32 7, ptr %add.ptr4, align 4196  %add.ptr5 = getelementptr inbounds i8, ptr %A, i64 16197  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %add.ptr5, ptr nonnull align 4 %add.ptr, i64 16, i1 false)198  ret void199}200 201; Function Attrs: nounwind uwtable202define dso_local void @test_overlap_3(ptr nocapture %A, i32 %x) local_unnamed_addr #0 {203; CHECK-LABEL: test_overlap_3:204; CHECK:       # %bb.0: # %entry205; CHECK-NEXT:    movl $7, -10(%rdi)206; CHECK-NEXT:    movl -16(%rdi), %eax207; CHECK-NEXT:    movl %eax, (%rdi)208; CHECK-NEXT:    movzwl -12(%rdi), %eax209; CHECK-NEXT:    movw %ax, 4(%rdi)210; CHECK-NEXT:    movl -10(%rdi), %eax211; CHECK-NEXT:    movl %eax, 6(%rdi)212; CHECK-NEXT:    movl -6(%rdi), %eax213; CHECK-NEXT:    movl %eax, 10(%rdi)214; CHECK-NEXT:    movzwl -2(%rdi), %eax215; CHECK-NEXT:    movw %ax, 14(%rdi)216; CHECK-NEXT:    movslq %esi, %rax217; CHECK-NEXT:    movq %rax, -9(%rdi)218; CHECK-NEXT:    movq %rax, -16(%rdi)219; CHECK-NEXT:    movb $0, -1(%rdi)220; CHECK-NEXT:    movq -16(%rdi), %rax221; CHECK-NEXT:    movq %rax, 16(%rdi)222; CHECK-NEXT:    movzwl -8(%rdi), %eax223; CHECK-NEXT:    movw %ax, 24(%rdi)224; CHECK-NEXT:    movl -6(%rdi), %eax225; CHECK-NEXT:    movl %eax, 26(%rdi)226; CHECK-NEXT:    movzbl -2(%rdi), %eax227; CHECK-NEXT:    movb %al, 30(%rdi)228; CHECK-NEXT:    movzbl -1(%rdi), %eax229; CHECK-NEXT:    movb %al, 31(%rdi)230; CHECK-NEXT:    retq231;232; DISABLED-LABEL: test_overlap_3:233; DISABLED:       # %bb.0: # %entry234; DISABLED-NEXT:    movl $7, -10(%rdi)235; DISABLED-NEXT:    movups -16(%rdi), %xmm0236; DISABLED-NEXT:    movups %xmm0, (%rdi)237; DISABLED-NEXT:    movslq %esi, %rax238; DISABLED-NEXT:    movq %rax, -9(%rdi)239; DISABLED-NEXT:    movq %rax, -16(%rdi)240; DISABLED-NEXT:    movb $0, -1(%rdi)241; DISABLED-NEXT:    movups -16(%rdi), %xmm0242; DISABLED-NEXT:    movups %xmm0, 16(%rdi)243; DISABLED-NEXT:    retq244;245; CHECK-AVX2-LABEL: test_overlap_3:246; CHECK-AVX2:       # %bb.0: # %entry247; CHECK-AVX2-NEXT:    movl $7, -10(%rdi)248; CHECK-AVX2-NEXT:    movl -16(%rdi), %eax249; CHECK-AVX2-NEXT:    movl %eax, (%rdi)250; CHECK-AVX2-NEXT:    movzwl -12(%rdi), %eax251; CHECK-AVX2-NEXT:    movw %ax, 4(%rdi)252; CHECK-AVX2-NEXT:    movl -10(%rdi), %eax253; CHECK-AVX2-NEXT:    movl %eax, 6(%rdi)254; CHECK-AVX2-NEXT:    movl -6(%rdi), %eax255; CHECK-AVX2-NEXT:    movl %eax, 10(%rdi)256; CHECK-AVX2-NEXT:    movzwl -2(%rdi), %eax257; CHECK-AVX2-NEXT:    movw %ax, 14(%rdi)258; CHECK-AVX2-NEXT:    movslq %esi, %rax259; CHECK-AVX2-NEXT:    movq %rax, -9(%rdi)260; CHECK-AVX2-NEXT:    movq %rax, -16(%rdi)261; CHECK-AVX2-NEXT:    movb $0, -1(%rdi)262; CHECK-AVX2-NEXT:    movq -16(%rdi), %rax263; CHECK-AVX2-NEXT:    movq %rax, 16(%rdi)264; CHECK-AVX2-NEXT:    movzwl -8(%rdi), %eax265; CHECK-AVX2-NEXT:    movw %ax, 24(%rdi)266; CHECK-AVX2-NEXT:    movl -6(%rdi), %eax267; CHECK-AVX2-NEXT:    movl %eax, 26(%rdi)268; CHECK-AVX2-NEXT:    movzbl -2(%rdi), %eax269; CHECK-AVX2-NEXT:    movb %al, 30(%rdi)270; CHECK-AVX2-NEXT:    movzbl -1(%rdi), %eax271; CHECK-AVX2-NEXT:    movb %al, 31(%rdi)272; CHECK-AVX2-NEXT:    retq273;274; CHECK-AVX512-LABEL: test_overlap_3:275; CHECK-AVX512:       # %bb.0: # %entry276; CHECK-AVX512-NEXT:    movl $7, -10(%rdi)277; CHECK-AVX512-NEXT:    movl -16(%rdi), %eax278; CHECK-AVX512-NEXT:    movl %eax, (%rdi)279; CHECK-AVX512-NEXT:    movzwl -12(%rdi), %eax280; CHECK-AVX512-NEXT:    movw %ax, 4(%rdi)281; CHECK-AVX512-NEXT:    movl -10(%rdi), %eax282; CHECK-AVX512-NEXT:    movl %eax, 6(%rdi)283; CHECK-AVX512-NEXT:    movl -6(%rdi), %eax284; CHECK-AVX512-NEXT:    movl %eax, 10(%rdi)285; CHECK-AVX512-NEXT:    movzwl -2(%rdi), %eax286; CHECK-AVX512-NEXT:    movw %ax, 14(%rdi)287; CHECK-AVX512-NEXT:    movslq %esi, %rax288; CHECK-AVX512-NEXT:    movq %rax, -9(%rdi)289; CHECK-AVX512-NEXT:    movq %rax, -16(%rdi)290; CHECK-AVX512-NEXT:    movb $0, -1(%rdi)291; CHECK-AVX512-NEXT:    movq -16(%rdi), %rax292; CHECK-AVX512-NEXT:    movq %rax, 16(%rdi)293; CHECK-AVX512-NEXT:    movzwl -8(%rdi), %eax294; CHECK-AVX512-NEXT:    movw %ax, 24(%rdi)295; CHECK-AVX512-NEXT:    movl -6(%rdi), %eax296; CHECK-AVX512-NEXT:    movl %eax, 26(%rdi)297; CHECK-AVX512-NEXT:    movzbl -2(%rdi), %eax298; CHECK-AVX512-NEXT:    movb %al, 30(%rdi)299; CHECK-AVX512-NEXT:    movzbl -1(%rdi), %eax300; CHECK-AVX512-NEXT:    movb %al, 31(%rdi)301; CHECK-AVX512-NEXT:    retq302entry:303  %add.ptr = getelementptr inbounds i8, ptr %A, i64 -16304  %add.ptr1 = getelementptr inbounds i8, ptr %A, i64 -10305  store i32 7, ptr %add.ptr1, align 4306  tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %A, ptr nonnull align 4 %add.ptr, i64 16, i1 false)307  %conv = sext i32 %x to i64308  %add.ptr2 = getelementptr inbounds i8, ptr %A, i64 -9309  store i64 %conv, ptr %add.ptr2, align 8310  store i64 %conv, ptr %add.ptr, align 8311  %add.ptr5 = getelementptr inbounds i8, ptr %A, i64 -1312  store i8 0, ptr %add.ptr5, align 1313  %add.ptr6 = getelementptr inbounds i8, ptr %A, i64 16314  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %add.ptr6, ptr nonnull align 4 %add.ptr, i64 16, i1 false)315  ret void316}317 318; Function Attrs: nounwind uwtable319define dso_local void @test_overlap_4(ptr nocapture %A, i32 %x) local_unnamed_addr #0 {320; CHECK-LABEL: test_overlap_4:321; CHECK:       # %bb.0: # %entry322; CHECK-NEXT:    movups -16(%rdi), %xmm0323; CHECK-NEXT:    movups %xmm0, (%rdi)324; CHECK-NEXT:    movslq %esi, %rax325; CHECK-NEXT:    movq %rax, -8(%rdi)326; CHECK-NEXT:    movl %eax, -16(%rdi)327; CHECK-NEXT:    movl $0, -11(%rdi)328; CHECK-NEXT:    movl -16(%rdi), %eax329; CHECK-NEXT:    movl %eax, 16(%rdi)330; CHECK-NEXT:    movzbl -12(%rdi), %eax331; CHECK-NEXT:    movb %al, 20(%rdi)332; CHECK-NEXT:    movl -11(%rdi), %eax333; CHECK-NEXT:    movl %eax, 21(%rdi)334; CHECK-NEXT:    movl -7(%rdi), %eax335; CHECK-NEXT:    movl %eax, 25(%rdi)336; CHECK-NEXT:    movzwl -3(%rdi), %eax337; CHECK-NEXT:    movw %ax, 29(%rdi)338; CHECK-NEXT:    movzbl -1(%rdi), %eax339; CHECK-NEXT:    movb %al, 31(%rdi)340; CHECK-NEXT:    retq341;342; DISABLED-LABEL: test_overlap_4:343; DISABLED:       # %bb.0: # %entry344; DISABLED-NEXT:    movups -16(%rdi), %xmm0345; DISABLED-NEXT:    movups %xmm0, (%rdi)346; DISABLED-NEXT:    movslq %esi, %rax347; DISABLED-NEXT:    movq %rax, -8(%rdi)348; DISABLED-NEXT:    movl %eax, -16(%rdi)349; DISABLED-NEXT:    movl $0, -11(%rdi)350; DISABLED-NEXT:    movups -16(%rdi), %xmm0351; DISABLED-NEXT:    movups %xmm0, 16(%rdi)352; DISABLED-NEXT:    retq353;354; CHECK-AVX2-LABEL: test_overlap_4:355; CHECK-AVX2:       # %bb.0: # %entry356; CHECK-AVX2-NEXT:    vmovups -16(%rdi), %xmm0357; CHECK-AVX2-NEXT:    vmovups %xmm0, (%rdi)358; CHECK-AVX2-NEXT:    movslq %esi, %rax359; CHECK-AVX2-NEXT:    movq %rax, -8(%rdi)360; CHECK-AVX2-NEXT:    movl %eax, -16(%rdi)361; CHECK-AVX2-NEXT:    movl $0, -11(%rdi)362; CHECK-AVX2-NEXT:    movl -16(%rdi), %eax363; CHECK-AVX2-NEXT:    movl %eax, 16(%rdi)364; CHECK-AVX2-NEXT:    movzbl -12(%rdi), %eax365; CHECK-AVX2-NEXT:    movb %al, 20(%rdi)366; CHECK-AVX2-NEXT:    movl -11(%rdi), %eax367; CHECK-AVX2-NEXT:    movl %eax, 21(%rdi)368; CHECK-AVX2-NEXT:    movl -7(%rdi), %eax369; CHECK-AVX2-NEXT:    movl %eax, 25(%rdi)370; CHECK-AVX2-NEXT:    movzwl -3(%rdi), %eax371; CHECK-AVX2-NEXT:    movw %ax, 29(%rdi)372; CHECK-AVX2-NEXT:    movzbl -1(%rdi), %eax373; CHECK-AVX2-NEXT:    movb %al, 31(%rdi)374; CHECK-AVX2-NEXT:    retq375;376; CHECK-AVX512-LABEL: test_overlap_4:377; CHECK-AVX512:       # %bb.0: # %entry378; CHECK-AVX512-NEXT:    vmovups -16(%rdi), %xmm0379; CHECK-AVX512-NEXT:    vmovups %xmm0, (%rdi)380; CHECK-AVX512-NEXT:    movslq %esi, %rax381; CHECK-AVX512-NEXT:    movq %rax, -8(%rdi)382; CHECK-AVX512-NEXT:    movl %eax, -16(%rdi)383; CHECK-AVX512-NEXT:    movl $0, -11(%rdi)384; CHECK-AVX512-NEXT:    movl -16(%rdi), %eax385; CHECK-AVX512-NEXT:    movl %eax, 16(%rdi)386; CHECK-AVX512-NEXT:    movzbl -12(%rdi), %eax387; CHECK-AVX512-NEXT:    movb %al, 20(%rdi)388; CHECK-AVX512-NEXT:    movl -11(%rdi), %eax389; CHECK-AVX512-NEXT:    movl %eax, 21(%rdi)390; CHECK-AVX512-NEXT:    movl -7(%rdi), %eax391; CHECK-AVX512-NEXT:    movl %eax, 25(%rdi)392; CHECK-AVX512-NEXT:    movzwl -3(%rdi), %eax393; CHECK-AVX512-NEXT:    movw %ax, 29(%rdi)394; CHECK-AVX512-NEXT:    movzbl -1(%rdi), %eax395; CHECK-AVX512-NEXT:    movb %al, 31(%rdi)396; CHECK-AVX512-NEXT:    retq397entry:398  %add.ptr = getelementptr inbounds i8, ptr %A, i64 -16399  tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %A, ptr nonnull align 4 %add.ptr, i64 16, i1 false)400  %conv = sext i32 %x to i64401  %add.ptr1 = getelementptr inbounds i8, ptr %A, i64 -8402  store i64 %conv, ptr %add.ptr1, align 8403  store i32 %x, ptr %add.ptr, align 4404  %add.ptr3 = getelementptr inbounds i8, ptr %A, i64 -11405  store i32 0, ptr %add.ptr3, align 4406  %add.ptr4 = getelementptr inbounds i8, ptr %A, i64 16407  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %add.ptr4, ptr nonnull align 4 %add.ptr, i64 16, i1 false)408  ret void409}410 411; Function Attrs: nounwind uwtable412define dso_local void @test_overlap_5(ptr nocapture %A, i32 %x) local_unnamed_addr #0 {413; CHECK-LABEL: test_overlap_5:414; CHECK:       # %bb.0: # %entry415; CHECK-NEXT:    movups -16(%rdi), %xmm0416; CHECK-NEXT:    movups %xmm0, (%rdi)417; CHECK-NEXT:    movslq %esi, %rax418; CHECK-NEXT:    movq %rax, -16(%rdi)419; CHECK-NEXT:    movb %al, -14(%rdi)420; CHECK-NEXT:    movb $0, -11(%rdi)421; CHECK-NEXT:    movzwl -16(%rdi), %eax422; CHECK-NEXT:    movw %ax, 16(%rdi)423; CHECK-NEXT:    movzbl -14(%rdi), %eax424; CHECK-NEXT:    movb %al, 18(%rdi)425; CHECK-NEXT:    movzwl -13(%rdi), %eax426; CHECK-NEXT:    movw %ax, 19(%rdi)427; CHECK-NEXT:    movzbl -11(%rdi), %eax428; CHECK-NEXT:    movb %al, 21(%rdi)429; CHECK-NEXT:    movq -10(%rdi), %rax430; CHECK-NEXT:    movq %rax, 22(%rdi)431; CHECK-NEXT:    movzwl -2(%rdi), %eax432; CHECK-NEXT:    movw %ax, 30(%rdi)433; CHECK-NEXT:    retq434;435; DISABLED-LABEL: test_overlap_5:436; DISABLED:       # %bb.0: # %entry437; DISABLED-NEXT:    movups -16(%rdi), %xmm0438; DISABLED-NEXT:    movups %xmm0, (%rdi)439; DISABLED-NEXT:    movslq %esi, %rax440; DISABLED-NEXT:    movq %rax, -16(%rdi)441; DISABLED-NEXT:    movb %al, -14(%rdi)442; DISABLED-NEXT:    movb $0, -11(%rdi)443; DISABLED-NEXT:    movups -16(%rdi), %xmm0444; DISABLED-NEXT:    movups %xmm0, 16(%rdi)445; DISABLED-NEXT:    retq446;447; CHECK-AVX2-LABEL: test_overlap_5:448; CHECK-AVX2:       # %bb.0: # %entry449; CHECK-AVX2-NEXT:    vmovups -16(%rdi), %xmm0450; CHECK-AVX2-NEXT:    vmovups %xmm0, (%rdi)451; CHECK-AVX2-NEXT:    movslq %esi, %rax452; CHECK-AVX2-NEXT:    movq %rax, -16(%rdi)453; CHECK-AVX2-NEXT:    movb %al, -14(%rdi)454; CHECK-AVX2-NEXT:    movb $0, -11(%rdi)455; CHECK-AVX2-NEXT:    movzwl -16(%rdi), %eax456; CHECK-AVX2-NEXT:    movw %ax, 16(%rdi)457; CHECK-AVX2-NEXT:    movzbl -14(%rdi), %eax458; CHECK-AVX2-NEXT:    movb %al, 18(%rdi)459; CHECK-AVX2-NEXT:    movzwl -13(%rdi), %eax460; CHECK-AVX2-NEXT:    movw %ax, 19(%rdi)461; CHECK-AVX2-NEXT:    movzbl -11(%rdi), %eax462; CHECK-AVX2-NEXT:    movb %al, 21(%rdi)463; CHECK-AVX2-NEXT:    movq -10(%rdi), %rax464; CHECK-AVX2-NEXT:    movq %rax, 22(%rdi)465; CHECK-AVX2-NEXT:    movzwl -2(%rdi), %eax466; CHECK-AVX2-NEXT:    movw %ax, 30(%rdi)467; CHECK-AVX2-NEXT:    retq468;469; CHECK-AVX512-LABEL: test_overlap_5:470; CHECK-AVX512:       # %bb.0: # %entry471; CHECK-AVX512-NEXT:    vmovups -16(%rdi), %xmm0472; CHECK-AVX512-NEXT:    vmovups %xmm0, (%rdi)473; CHECK-AVX512-NEXT:    movslq %esi, %rax474; CHECK-AVX512-NEXT:    movq %rax, -16(%rdi)475; CHECK-AVX512-NEXT:    movb %al, -14(%rdi)476; CHECK-AVX512-NEXT:    movb $0, -11(%rdi)477; CHECK-AVX512-NEXT:    movzwl -16(%rdi), %eax478; CHECK-AVX512-NEXT:    movw %ax, 16(%rdi)479; CHECK-AVX512-NEXT:    movzbl -14(%rdi), %eax480; CHECK-AVX512-NEXT:    movb %al, 18(%rdi)481; CHECK-AVX512-NEXT:    movzwl -13(%rdi), %eax482; CHECK-AVX512-NEXT:    movw %ax, 19(%rdi)483; CHECK-AVX512-NEXT:    movzbl -11(%rdi), %eax484; CHECK-AVX512-NEXT:    movb %al, 21(%rdi)485; CHECK-AVX512-NEXT:    movq -10(%rdi), %rax486; CHECK-AVX512-NEXT:    movq %rax, 22(%rdi)487; CHECK-AVX512-NEXT:    movzwl -2(%rdi), %eax488; CHECK-AVX512-NEXT:    movw %ax, 30(%rdi)489; CHECK-AVX512-NEXT:    retq490entry:491  %add.ptr = getelementptr inbounds i8, ptr %A, i64 -16492  tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %A, ptr nonnull align 4 %add.ptr, i64 16, i1 false)493  %conv = sext i32 %x to i64494  store i64 %conv, ptr %add.ptr, align 8495  %conv2 = trunc i32 %x to i8496  %add.ptr3 = getelementptr inbounds i8, ptr %A, i64 -14497  store i8 %conv2, ptr %add.ptr3, align 1498  %add.ptr4 = getelementptr inbounds i8, ptr %A, i64 -11499  store i8 0, ptr %add.ptr4, align 1500  %add.ptr5 = getelementptr inbounds i8, ptr %A, i64 16501  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %add.ptr5, ptr nonnull align 4 %add.ptr, i64 16, i1 false)502  ret void503}504 505attributes #0 = { nounwind uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="none" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "use-soft-float"="false" }506 507attributes #1 = { argmemonly nounwind }508