brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.9 KiB · 3f2211c Raw
168 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=slp-vectorizer -S -mcpu=core-i7 | FileCheck %s3; RUN: opt < %s -passes=slp-vectorizer -slp-threshold=-100 -S -mcpu=core-i7 | FileCheck %s --check-prefix=FORCE_SLP4 5define  <4 x i8> @test(<4 x i8> %v, ptr %x) {6; CHECK-LABEL: @test(7; CHECK-NEXT:    [[X0:%.*]] = load i8, ptr [[X:%.*]], align 48; CHECK-NEXT:    [[G1:%.*]] = getelementptr inbounds i8, ptr [[X]], i64 19; CHECK-NEXT:    [[X1:%.*]] = load i8, ptr [[G1]], align 410; CHECK-NEXT:    [[V0:%.*]] = insertelement <4 x i8> [[V:%.*]], i8 [[X0]], i64 011; CHECK-NEXT:    [[V1:%.*]] = insertelement <4 x i8> [[V0]], i8 [[X1]], i64 112; CHECK-NEXT:    [[V2:%.*]] = add <4 x i8> [[V0]], [[V1]]13; CHECK-NEXT:    ret <4 x i8> [[V2]]14;15; FORCE_SLP-LABEL: @test(16; FORCE_SLP-NEXT:    [[X0:%.*]] = load i8, ptr [[X:%.*]], align 417; FORCE_SLP-NEXT:    [[G1:%.*]] = getelementptr inbounds i8, ptr [[X]], i64 118; FORCE_SLP-NEXT:    [[X1:%.*]] = load i8, ptr [[G1]], align 419; FORCE_SLP-NEXT:    [[V0:%.*]] = insertelement <4 x i8> [[V:%.*]], i8 [[X0]], i64 020; FORCE_SLP-NEXT:    [[V1:%.*]] = insertelement <4 x i8> [[V0]], i8 [[X1]], i64 121; FORCE_SLP-NEXT:    [[V2:%.*]] = add <4 x i8> [[V0]], [[V1]]22; FORCE_SLP-NEXT:    ret <4 x i8> [[V2]]23;24  %x0 = load i8, ptr %x, align 425  %g1 = getelementptr inbounds i8, ptr %x, i64 126  %x1 = load i8, ptr %g1, align 427  %v0 = insertelement <4 x i8> %v, i8 %x0, i64 028  %v1 = insertelement <4 x i8> %v0, i8 %x1, i64 129  %v2 = add <4 x i8> %v0, %v130  ret <4 x i8> %v231}32 33define  <2 x i8> @test2(<2 x i8> %t6, ptr %t1) {34; CHECK-LABEL: @test2(35; CHECK-NEXT:    [[T3:%.*]] = load i32, ptr [[T1:%.*]], align 436; CHECK-NEXT:    [[T4:%.*]] = getelementptr inbounds i32, ptr [[T1]], i64 137; CHECK-NEXT:    [[T5:%.*]] = load i32, ptr [[T4]], align 438; CHECK-NEXT:    [[T7:%.*]] = trunc i32 [[T3]] to i839; CHECK-NEXT:    [[T8:%.*]] = insertelement <2 x i8> [[T6:%.*]], i8 [[T7]], i64 040; CHECK-NEXT:    [[T9:%.*]] = trunc i32 [[T5]] to i841; CHECK-NEXT:    [[T10:%.*]] = insertelement <2 x i8> [[T8]], i8 [[T9]], i64 142; CHECK-NEXT:    [[T11:%.*]] = add <2 x i8> [[T10]], [[T8]]43; CHECK-NEXT:    ret <2 x i8> [[T11]]44;45; FORCE_SLP-LABEL: @test2(46; FORCE_SLP-NEXT:    [[T3:%.*]] = load i32, ptr [[T1:%.*]], align 447; FORCE_SLP-NEXT:    [[T4:%.*]] = getelementptr inbounds i32, ptr [[T1]], i64 148; FORCE_SLP-NEXT:    [[T5:%.*]] = load i32, ptr [[T4]], align 449; FORCE_SLP-NEXT:    [[T7:%.*]] = trunc i32 [[T3]] to i850; FORCE_SLP-NEXT:    [[T8:%.*]] = insertelement <2 x i8> [[T6:%.*]], i8 [[T7]], i64 051; FORCE_SLP-NEXT:    [[T9:%.*]] = trunc i32 [[T5]] to i852; FORCE_SLP-NEXT:    [[T10:%.*]] = insertelement <2 x i8> [[T8]], i8 [[T9]], i64 153; FORCE_SLP-NEXT:    [[T11:%.*]] = add <2 x i8> [[T10]], [[T8]]54; FORCE_SLP-NEXT:    ret <2 x i8> [[T11]]55;56  %t3 = load i32, ptr %t1, align 457  %t4 = getelementptr inbounds i32, ptr %t1, i64 158  %t5 = load i32, ptr %t4, align 459  %t7 = trunc i32 %t3 to i860  %t8 = insertelement <2 x i8> %t6, i8 %t7, i64 061  %t9 = trunc i32 %t5 to i862  %t10 = insertelement <2 x i8> %t8, i8 %t9, i64 163  %t11 = add <2 x i8> %t10, %t864  ret <2 x i8> %t1165}66 67define  <2 x i8> @test_reorder(<2 x i8> %t6, ptr %t1) {68; CHECK-LABEL: @test_reorder(69; CHECK-NEXT:    [[T3:%.*]] = load i32, ptr [[T1:%.*]], align 470; CHECK-NEXT:    [[T4:%.*]] = getelementptr inbounds i32, ptr [[T1]], i64 171; CHECK-NEXT:    [[T5:%.*]] = load i32, ptr [[T4]], align 472; CHECK-NEXT:    [[T7:%.*]] = trunc i32 [[T3]] to i873; CHECK-NEXT:    [[T8:%.*]] = insertelement <2 x i8> [[T6:%.*]], i8 [[T7]], i64 174; CHECK-NEXT:    [[T9:%.*]] = trunc i32 [[T5]] to i875; CHECK-NEXT:    [[T10:%.*]] = insertelement <2 x i8> [[T8]], i8 [[T9]], i64 076; CHECK-NEXT:    [[T11:%.*]] = add <2 x i8> [[T10]], [[T8]]77; CHECK-NEXT:    ret <2 x i8> [[T11]]78;79; FORCE_SLP-LABEL: @test_reorder(80; FORCE_SLP-NEXT:    [[T3:%.*]] = load i32, ptr [[T1:%.*]], align 481; FORCE_SLP-NEXT:    [[T4:%.*]] = getelementptr inbounds i32, ptr [[T1]], i64 182; FORCE_SLP-NEXT:    [[T5:%.*]] = load i32, ptr [[T4]], align 483; FORCE_SLP-NEXT:    [[T7:%.*]] = trunc i32 [[T3]] to i884; FORCE_SLP-NEXT:    [[T8:%.*]] = insertelement <2 x i8> [[T6:%.*]], i8 [[T7]], i64 185; FORCE_SLP-NEXT:    [[T9:%.*]] = trunc i32 [[T5]] to i886; FORCE_SLP-NEXT:    [[T10:%.*]] = insertelement <2 x i8> [[T8]], i8 [[T9]], i64 087; FORCE_SLP-NEXT:    [[T11:%.*]] = add <2 x i8> [[T10]], [[T8]]88; FORCE_SLP-NEXT:    ret <2 x i8> [[T11]]89;90  %t3 = load i32, ptr %t1, align 491  %t4 = getelementptr inbounds i32, ptr %t1, i64 192  %t5 = load i32, ptr %t4, align 493  %t7 = trunc i32 %t3 to i894  %t8 = insertelement <2 x i8> %t6, i8 %t7, i64 195  %t9 = trunc i32 %t5 to i896  %t10 = insertelement <2 x i8> %t8, i8 %t9, i64 097  %t11 = add <2 x i8> %t10, %t898  ret <2 x i8> %t1199}100 101define  <4 x i8> @test_subvector(<4 x i8> %t6, ptr %t1) {102; CHECK-LABEL: @test_subvector(103; CHECK-NEXT:    [[T3:%.*]] = load i32, ptr [[T1:%.*]], align 4104; CHECK-NEXT:    [[T4:%.*]] = getelementptr inbounds i32, ptr [[T1]], i64 1105; CHECK-NEXT:    [[T5:%.*]] = load i32, ptr [[T4]], align 4106; CHECK-NEXT:    [[T7:%.*]] = trunc i32 [[T3]] to i8107; CHECK-NEXT:    [[T8:%.*]] = insertelement <4 x i8> [[T6:%.*]], i8 [[T7]], i64 0108; CHECK-NEXT:    [[T9:%.*]] = trunc i32 [[T5]] to i8109; CHECK-NEXT:    [[T10:%.*]] = insertelement <4 x i8> [[T8]], i8 [[T9]], i64 1110; CHECK-NEXT:    [[T11:%.*]] = add <4 x i8> [[T10]], [[T8]]111; CHECK-NEXT:    ret <4 x i8> [[T11]]112;113; FORCE_SLP-LABEL: @test_subvector(114; FORCE_SLP-NEXT:    [[T3:%.*]] = load i32, ptr [[T1:%.*]], align 4115; FORCE_SLP-NEXT:    [[T4:%.*]] = getelementptr inbounds i32, ptr [[T1]], i64 1116; FORCE_SLP-NEXT:    [[T5:%.*]] = load i32, ptr [[T4]], align 4117; FORCE_SLP-NEXT:    [[T7:%.*]] = trunc i32 [[T3]] to i8118; FORCE_SLP-NEXT:    [[T8:%.*]] = insertelement <4 x i8> [[T6:%.*]], i8 [[T7]], i64 0119; FORCE_SLP-NEXT:    [[T9:%.*]] = trunc i32 [[T5]] to i8120; FORCE_SLP-NEXT:    [[T10:%.*]] = insertelement <4 x i8> [[T8]], i8 [[T9]], i64 1121; FORCE_SLP-NEXT:    [[T11:%.*]] = add <4 x i8> [[T10]], [[T8]]122; FORCE_SLP-NEXT:    ret <4 x i8> [[T11]]123;124  %t3 = load i32, ptr %t1, align 4125  %t4 = getelementptr inbounds i32, ptr %t1, i64 1126  %t5 = load i32, ptr %t4, align 4127  %t7 = trunc i32 %t3 to i8128  %t8 = insertelement <4 x i8> %t6, i8 %t7, i64 0129  %t9 = trunc i32 %t5 to i8130  %t10 = insertelement <4 x i8> %t8, i8 %t9, i64 1131  %t11 = add <4 x i8> %t10, %t8132  ret <4 x i8> %t11133}134 135define  <4 x i8> @test_subvector_reorder(<4 x i8> %t6, ptr %t1) {136; CHECK-LABEL: @test_subvector_reorder(137; CHECK-NEXT:    [[T3:%.*]] = load i32, ptr [[T1:%.*]], align 4138; CHECK-NEXT:    [[T4:%.*]] = getelementptr inbounds i32, ptr [[T1]], i64 1139; CHECK-NEXT:    [[T5:%.*]] = load i32, ptr [[T4]], align 4140; CHECK-NEXT:    [[T7:%.*]] = trunc i32 [[T3]] to i8141; CHECK-NEXT:    [[T8:%.*]] = insertelement <4 x i8> [[T6:%.*]], i8 [[T7]], i64 3142; CHECK-NEXT:    [[T9:%.*]] = trunc i32 [[T5]] to i8143; CHECK-NEXT:    [[T10:%.*]] = insertelement <4 x i8> [[T8]], i8 [[T9]], i64 2144; CHECK-NEXT:    [[T11:%.*]] = add <4 x i8> [[T10]], [[T8]]145; CHECK-NEXT:    ret <4 x i8> [[T11]]146;147; FORCE_SLP-LABEL: @test_subvector_reorder(148; FORCE_SLP-NEXT:    [[T3:%.*]] = load i32, ptr [[T1:%.*]], align 4149; FORCE_SLP-NEXT:    [[T4:%.*]] = getelementptr inbounds i32, ptr [[T1]], i64 1150; FORCE_SLP-NEXT:    [[T5:%.*]] = load i32, ptr [[T4]], align 4151; FORCE_SLP-NEXT:    [[T7:%.*]] = trunc i32 [[T3]] to i8152; FORCE_SLP-NEXT:    [[T8:%.*]] = insertelement <4 x i8> [[T6:%.*]], i8 [[T7]], i64 3153; FORCE_SLP-NEXT:    [[T9:%.*]] = trunc i32 [[T5]] to i8154; FORCE_SLP-NEXT:    [[T10:%.*]] = insertelement <4 x i8> [[T8]], i8 [[T9]], i64 2155; FORCE_SLP-NEXT:    [[T11:%.*]] = add <4 x i8> [[T10]], [[T8]]156; FORCE_SLP-NEXT:    ret <4 x i8> [[T11]]157;158  %t3 = load i32, ptr %t1, align 4159  %t4 = getelementptr inbounds i32, ptr %t1, i64 1160  %t5 = load i32, ptr %t4, align 4161  %t7 = trunc i32 %t3 to i8162  %t8 = insertelement <4 x i8> %t6, i8 %t7, i64 3163  %t9 = trunc i32 %t5 to i8164  %t10 = insertelement <4 x i8> %t8, i8 %t9, i64 2165  %t11 = add <4 x i8> %t10, %t8166  ret <4 x i8> %t11167}168