89 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --filter "LV: Found an estimated cost of [0-9]+ for VF [0-9]+ For instruction:\s*%valB = load i8, ptr %inB, align 1"2; RUN: opt -passes=loop-vectorize -vectorizer-maximize-bandwidth -S -mattr=+sse2 --debug-only=loop-vectorize --disable-output < %s 2>&1 | FileCheck %s --check-prefixes=SSE23; RUN: opt -passes=loop-vectorize -vectorizer-maximize-bandwidth -S -mattr=+sse4.2 --debug-only=loop-vectorize --disable-output < %s 2>&1 | FileCheck %s --check-prefixes=SSE424; RUN: opt -passes=loop-vectorize -vectorizer-maximize-bandwidth -S -mattr=+avx --debug-only=loop-vectorize --disable-output < %s 2>&1 | FileCheck %s --check-prefixes=AVX15; RUN: opt -passes=loop-vectorize -vectorizer-maximize-bandwidth -S -mattr=+avx2,-fast-gather --debug-only=loop-vectorize --disable-output < %s 2>&1 | FileCheck %s --check-prefixes=AVX2-SLOWGATHER6; RUN: opt -passes=loop-vectorize -vectorizer-maximize-bandwidth -S -mattr=+avx2,+fast-gather --debug-only=loop-vectorize --disable-output < %s 2>&1 | FileCheck %s --check-prefixes=AVX2-FASTGATHER7; RUN: opt -passes=loop-vectorize -vectorizer-maximize-bandwidth -S -mattr=+avx512bw --debug-only=loop-vectorize --disable-output < %s 2>&1 | FileCheck %s --check-prefixes=AVX5128 9; REQUIRES: asserts10 11target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"12target triple = "x86_64-unknown-linux-gnu"13 14@A = global [1024 x i8] zeroinitializer, align 12815@B = global [1024 x i8] zeroinitializer, align 12816@C = global [1024 x i8] zeroinitializer, align 12817 18define void @test() {19; SSE2-LABEL: 'test'20; SSE2: LV: Found an estimated cost of 1 for VF 1 For instruction: %valB = load i8, ptr %inB, align 121; SSE2: Cost of 25 for VF 2: {{.*}}ir<%valB> = load22; SSE2: Cost of 51 for VF 4: {{.*}}ir<%valB> = load23; SSE2: Cost of 103 for VF 8: {{.*}}ir<%valB> = load24; SSE2: Cost of 207 for VF 16: {{.*}}ir<%valB> = load25;26; SSE42-LABEL: 'test'27; SSE42: LV: Found an estimated cost of 1 for VF 1 For instruction: %valB = load i8, ptr %inB, align 128; SSE42: Cost of 24 for VF 2: {{.*}}ir<%valB> = load29; SSE42: Cost of 48 for VF 4: {{.*}}ir<%valB> = load30; SSE42: Cost of 96 for VF 8: {{.*}}ir<%valB> = load31; SSE42: Cost of 192 for VF 16: {{.*}}ir<%valB> = load32;33; AVX1-LABEL: 'test'34; AVX1: LV: Found an estimated cost of 1 for VF 1 For instruction: %valB = load i8, ptr %inB, align 135; AVX1: Cost of 24 for VF 2: {{.*}}ir<%valB> = load36; AVX1: Cost of 48 for VF 4: {{.*}}ir<%valB> = load37; AVX1: Cost of 96 for VF 8: {{.*}}ir<%valB> = load38; AVX1: Cost of 192 for VF 16: {{.*}}ir<%valB> = load39; AVX1: Cost of 385 for VF 32: {{.*}}ir<%valB> = load40;41; AVX2-SLOWGATHER-LABEL: 'test'42; AVX2-SLOWGATHER: LV: Found an estimated cost of 1 for VF 1 For instruction: %valB = load i8, ptr %inB, align 143; AVX2-SLOWGATHER: Cost of 4 for VF 2: {{.*}}ir<%valB> = load44; AVX2-SLOWGATHER: Cost of 8 for VF 4: {{.*}}ir<%valB> = load45; AVX2-SLOWGATHER: Cost of 16 for VF 8: {{.*}}ir<%valB> = load46; AVX2-SLOWGATHER: Cost of 32 for VF 16: {{.*}}ir<%valB> = load47; AVX2-SLOWGATHER: Cost of 65 for VF 32: {{.*}}ir<%valB> = load48;49; AVX2-FASTGATHER-LABEL: 'test'50; AVX2-FASTGATHER: LV: Found an estimated cost of 1 for VF 1 For instruction: %valB = load i8, ptr %inB, align 151; AVX2-FASTGATHER: Cost of 6 for VF 2: {{.*}}ir<%valB> = load52; AVX2-FASTGATHER: Cost of 13 for VF 4: {{.*}}ir<%valB> = load53; AVX2-FASTGATHER: Cost of 26 for VF 8: {{.*}}ir<%valB> = load54; AVX2-FASTGATHER: Cost of 52 for VF 16: {{.*}}ir<%valB> = load55; AVX2-FASTGATHER: Cost of 105 for VF 32: {{.*}}ir<%valB> = load56;57; AVX512-LABEL: 'test'58; AVX512: LV: Found an estimated cost of 1 for VF 1 For instruction: %valB = load i8, ptr %inB, align 159; AVX512: Cost of 6 for VF 2: {{.*}}ir<%valB> = load60; AVX512: Cost of 13 for VF 4: {{.*}}ir<%valB> = load61; AVX512: Cost of 27 for VF 8: {{.*}}ir<%valB> = load62; AVX512: Cost of 54 for VF 16: {{.*}}ir<%valB> = load63; AVX512: Cost of 109 for VF 32: {{.*}}ir<%valB> = load64; AVX512: Cost of 219 for VF 64: {{.*}}ir<%valB> = load65;66entry:67 br label %for.body68 69for.body:70 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]71 72 %inA = getelementptr inbounds [1024 x i8], ptr @A, i64 0, i64 %iv73 %valA = load i8, ptr %inA74 %valA.ext = sext i8 %valA to i6475 76 %inB = getelementptr inbounds [1024 x i8], ptr @B, i64 0, i64 %valA.ext77 %valB = load i8, ptr %inB78 79 %out = getelementptr inbounds [1024 x i8], ptr @C, i64 0, i64 %iv80 store i8 %valB, ptr %out81 82 %iv.next = add nuw nsw i64 %iv, 183 %cmp = icmp ult i64 %iv.next, 102484 br i1 %cmp, label %for.body, label %for.cond.cleanup85 86for.cond.cleanup:87 ret void88}89