brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.3 KiB · 5d5445f Raw
346 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52 3; RUN: llc -verify-machineinstrs -O3 -mcpu=pwr8 \4; RUN:   -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck  \5; RUN:   -check-prefix=CHECK-P8 %s6 7; RUN: llc -verify-machineinstrs -O3 -mcpu=pwr8 -disable-ppc-vsx-swap-removal \8; RUN:   -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck  \9; RUN:   -check-prefix=NOOPTSWAP-P8 %s10 11; RUN: llc -O3 -mcpu=pwr9 -mtriple=powerpc64le-unknown-linux-gnu \12; RUN:  -verify-machineinstrs -ppc-vsr-nums-as-vr < %s | FileCheck  \13; RUN:  -check-prefix=CHECK-P9 --implicit-check-not xxswapd %s14 15; RUN: llc -O3 -mcpu=pwr9 -disable-ppc-vsx-swap-removal -mattr=-power9-vector \16; RUN:  -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s \17; RUN:  | FileCheck  -check-prefix=NOOPTSWAP-P9 %s18 19; LH: 2016-11-1720;   Updated align attritue from 16 to 8 to keep swap instructions tests.21;   Changes have been made on little-endian to use lvx and stvx22;   instructions instead of lxvd2x/xxswapd and xxswapd/stxvd2x for23;   aligned vectors with elements up to 4 bytes24 25; This test was generated from the following source:26;27; #define N 409628; int ca[N] __attribute__((aligned(16)));29; int cb[N] __attribute__((aligned(16)));30; int cc[N] __attribute__((aligned(16)));31; int cd[N] __attribute__((aligned(16)));32;33; void foo ()34; {35;   int i;36;   for (i = 0; i < N; i++) {37;     ca[i] = (cb[i] + cc[i]) * cd[i];38;   }39; }40 41@cb = common global [4096 x i32] zeroinitializer, align 842@cc = common global [4096 x i32] zeroinitializer, align 843@cd = common global [4096 x i32] zeroinitializer, align 844@ca = common global [4096 x i32] zeroinitializer, align 845 46define void @foo() {47; CHECK-P8-LABEL: foo:48; CHECK-P8:       # %bb.0: # %entry49; CHECK-P8-NEXT:    li 3, 25650; CHECK-P8-NEXT:    std 30, -16(1) # 8-byte Folded Spill51; CHECK-P8-NEXT:    addis 4, 2, .LC0@toc@ha52; CHECK-P8-NEXT:    addis 5, 2, .LC1@toc@ha53; CHECK-P8-NEXT:    addis 6, 2, .LC2@toc@ha54; CHECK-P8-NEXT:    addis 7, 2, .LC3@toc@ha55; CHECK-P8-NEXT:    li 8, 1656; CHECK-P8-NEXT:    li 9, 3257; CHECK-P8-NEXT:    mtctr 358; CHECK-P8-NEXT:    ld 4, .LC0@toc@l(4)59; CHECK-P8-NEXT:    ld 5, .LC1@toc@l(5)60; CHECK-P8-NEXT:    ld 6, .LC2@toc@l(6)61; CHECK-P8-NEXT:    ld 7, .LC3@toc@l(7)62; CHECK-P8-NEXT:    li 3, 063; CHECK-P8-NEXT:    li 10, 4864; CHECK-P8-NEXT:    .p2align 465; CHECK-P8-NEXT:  .LBB0_1: # %vector.body66; CHECK-P8-NEXT:    #67; CHECK-P8-NEXT:    lxvd2x 34, 4, 368; CHECK-P8-NEXT:    lxvd2x 35, 5, 369; CHECK-P8-NEXT:    add 11, 4, 370; CHECK-P8-NEXT:    add 12, 5, 371; CHECK-P8-NEXT:    lxvd2x 36, 6, 372; CHECK-P8-NEXT:    add 30, 6, 373; CHECK-P8-NEXT:    lxvd2x 37, 11, 874; CHECK-P8-NEXT:    lxvd2x 32, 12, 1075; CHECK-P8-NEXT:    vadduwm 2, 3, 276; CHECK-P8-NEXT:    lxvd2x 35, 12, 877; CHECK-P8-NEXT:    vmuluwm 2, 2, 478; CHECK-P8-NEXT:    lxvd2x 36, 11, 979; CHECK-P8-NEXT:    vadduwm 3, 3, 580; CHECK-P8-NEXT:    lxvd2x 37, 12, 981; CHECK-P8-NEXT:    stxvd2x 34, 7, 382; CHECK-P8-NEXT:    lxvd2x 34, 30, 1083; CHECK-P8-NEXT:    vadduwm 4, 5, 484; CHECK-P8-NEXT:    lxvd2x 37, 11, 1085; CHECK-P8-NEXT:    add 11, 7, 386; CHECK-P8-NEXT:    addi 3, 3, 6487; CHECK-P8-NEXT:    vadduwm 5, 0, 588; CHECK-P8-NEXT:    lxvd2x 32, 30, 889; CHECK-P8-NEXT:    vmuluwm 2, 5, 290; CHECK-P8-NEXT:    vmuluwm 3, 3, 091; CHECK-P8-NEXT:    lxvd2x 32, 30, 992; CHECK-P8-NEXT:    stxvd2x 34, 11, 1093; CHECK-P8-NEXT:    vmuluwm 4, 4, 094; CHECK-P8-NEXT:    stxvd2x 35, 11, 895; CHECK-P8-NEXT:    stxvd2x 36, 11, 996; CHECK-P8-NEXT:    bdnz .LBB0_197; CHECK-P8-NEXT:  # %bb.2: # %for.end98; CHECK-P8-NEXT:    ld 30, -16(1) # 8-byte Folded Reload99; CHECK-P8-NEXT:    blr100;101; NOOPTSWAP-P8-LABEL: foo:102; NOOPTSWAP-P8:       # %bb.0: # %entry103; NOOPTSWAP-P8-NEXT:    li 3, 256104; NOOPTSWAP-P8-NEXT:    std 30, -16(1) # 8-byte Folded Spill105; NOOPTSWAP-P8-NEXT:    addis 4, 2, .LC0@toc@ha106; NOOPTSWAP-P8-NEXT:    addis 5, 2, .LC1@toc@ha107; NOOPTSWAP-P8-NEXT:    addis 6, 2, .LC2@toc@ha108; NOOPTSWAP-P8-NEXT:    addis 7, 2, .LC3@toc@ha109; NOOPTSWAP-P8-NEXT:    li 8, 16110; NOOPTSWAP-P8-NEXT:    li 9, 32111; NOOPTSWAP-P8-NEXT:    mtctr 3112; NOOPTSWAP-P8-NEXT:    ld 4, .LC0@toc@l(4)113; NOOPTSWAP-P8-NEXT:    ld 5, .LC1@toc@l(5)114; NOOPTSWAP-P8-NEXT:    ld 6, .LC2@toc@l(6)115; NOOPTSWAP-P8-NEXT:    ld 7, .LC3@toc@l(7)116; NOOPTSWAP-P8-NEXT:    li 3, 0117; NOOPTSWAP-P8-NEXT:    li 10, 48118; NOOPTSWAP-P8-NEXT:    .p2align 4119; NOOPTSWAP-P8-NEXT:  .LBB0_1: # %vector.body120; NOOPTSWAP-P8-NEXT:    #121; NOOPTSWAP-P8-NEXT:    lxvd2x 0, 4, 3122; NOOPTSWAP-P8-NEXT:    lxvd2x 1, 5, 3123; NOOPTSWAP-P8-NEXT:    add 30, 6, 3124; NOOPTSWAP-P8-NEXT:    add 11, 4, 3125; NOOPTSWAP-P8-NEXT:    add 12, 5, 3126; NOOPTSWAP-P8-NEXT:    lxvd2x 2, 11, 8127; NOOPTSWAP-P8-NEXT:    lxvd2x 3, 12, 8128; NOOPTSWAP-P8-NEXT:    lxvd2x 4, 11, 9129; NOOPTSWAP-P8-NEXT:    lxvd2x 5, 12, 9130; NOOPTSWAP-P8-NEXT:    lxvd2x 6, 11, 10131; NOOPTSWAP-P8-NEXT:    add 11, 7, 3132; NOOPTSWAP-P8-NEXT:    lxvd2x 7, 12, 10133; NOOPTSWAP-P8-NEXT:    xxswapd 34, 0134; NOOPTSWAP-P8-NEXT:    lxvd2x 0, 6, 3135; NOOPTSWAP-P8-NEXT:    xxswapd 35, 1136; NOOPTSWAP-P8-NEXT:    lxvd2x 1, 30, 8137; NOOPTSWAP-P8-NEXT:    vadduwm 2, 3, 2138; NOOPTSWAP-P8-NEXT:    xxswapd 36, 2139; NOOPTSWAP-P8-NEXT:    xxswapd 32, 4140; NOOPTSWAP-P8-NEXT:    xxswapd 38, 6141; NOOPTSWAP-P8-NEXT:    xxswapd 37, 3142; NOOPTSWAP-P8-NEXT:    xxswapd 33, 5143; NOOPTSWAP-P8-NEXT:    xxswapd 39, 7144; NOOPTSWAP-P8-NEXT:    vadduwm 3, 5, 4145; NOOPTSWAP-P8-NEXT:    vadduwm 4, 1, 0146; NOOPTSWAP-P8-NEXT:    xxswapd 40, 0147; NOOPTSWAP-P8-NEXT:    xxswapd 41, 1148; NOOPTSWAP-P8-NEXT:    lxvd2x 0, 30, 9149; NOOPTSWAP-P8-NEXT:    lxvd2x 1, 30, 10150; NOOPTSWAP-P8-NEXT:    vmuluwm 2, 2, 8151; NOOPTSWAP-P8-NEXT:    vmuluwm 3, 3, 9152; NOOPTSWAP-P8-NEXT:    xxswapd 42, 0153; NOOPTSWAP-P8-NEXT:    xxswapd 43, 1154; NOOPTSWAP-P8-NEXT:    vmuluwm 4, 4, 10155; NOOPTSWAP-P8-NEXT:    xxswapd 0, 34156; NOOPTSWAP-P8-NEXT:    vadduwm 2, 7, 6157; NOOPTSWAP-P8-NEXT:    xxswapd 1, 35158; NOOPTSWAP-P8-NEXT:    vmuluwm 2, 2, 11159; NOOPTSWAP-P8-NEXT:    stxvd2x 0, 7, 3160; NOOPTSWAP-P8-NEXT:    addi 3, 3, 64161; NOOPTSWAP-P8-NEXT:    stxvd2x 1, 11, 8162; NOOPTSWAP-P8-NEXT:    xxswapd 2, 36163; NOOPTSWAP-P8-NEXT:    stxvd2x 2, 11, 9164; NOOPTSWAP-P8-NEXT:    xxswapd 3, 34165; NOOPTSWAP-P8-NEXT:    stxvd2x 3, 11, 10166; NOOPTSWAP-P8-NEXT:    bdnz .LBB0_1167; NOOPTSWAP-P8-NEXT:  # %bb.2: # %for.end168; NOOPTSWAP-P8-NEXT:    ld 30, -16(1) # 8-byte Folded Reload169; NOOPTSWAP-P8-NEXT:    blr170;171; CHECK-P9-LABEL: foo:172; CHECK-P9:       # %bb.0: # %entry173; CHECK-P9-NEXT:    li 6, 256174; CHECK-P9-NEXT:    addis 3, 2, .LC0@toc@ha175; CHECK-P9-NEXT:    addis 4, 2, .LC1@toc@ha176; CHECK-P9-NEXT:    addis 5, 2, .LC2@toc@ha177; CHECK-P9-NEXT:    mtctr 6178; CHECK-P9-NEXT:    addis 6, 2, .LC3@toc@ha179; CHECK-P9-NEXT:    ld 3, .LC0@toc@l(3)180; CHECK-P9-NEXT:    ld 4, .LC1@toc@l(4)181; CHECK-P9-NEXT:    ld 5, .LC2@toc@l(5)182; CHECK-P9-NEXT:    ld 6, .LC3@toc@l(6)183; CHECK-P9-NEXT:    addi 3, 3, 32184; CHECK-P9-NEXT:    addi 4, 4, 32185; CHECK-P9-NEXT:    addi 5, 5, 32186; CHECK-P9-NEXT:    addi 6, 6, 32187; CHECK-P9-NEXT:    .p2align 4188; CHECK-P9-NEXT:  .LBB0_1: # %vector.body189; CHECK-P9-NEXT:    #190; CHECK-P9-NEXT:    lxv 2, -32(3)191; CHECK-P9-NEXT:    lxv 3, -32(4)192; CHECK-P9-NEXT:    lxv 4, -16(4)193; CHECK-P9-NEXT:    vadduwm 2, 3, 2194; CHECK-P9-NEXT:    lxv 3, -32(5)195; CHECK-P9-NEXT:    vmuluwm 2, 2, 3196; CHECK-P9-NEXT:    lxv 3, -16(3)197; CHECK-P9-NEXT:    vadduwm 3, 4, 3198; CHECK-P9-NEXT:    lxv 4, 0(4)199; CHECK-P9-NEXT:    stxv 2, -32(6)200; CHECK-P9-NEXT:    lxv 2, -16(5)201; CHECK-P9-NEXT:    vmuluwm 2, 3, 2202; CHECK-P9-NEXT:    lxv 3, 0(3)203; CHECK-P9-NEXT:    vadduwm 3, 4, 3204; CHECK-P9-NEXT:    lxv 4, 16(4)205; CHECK-P9-NEXT:    addi 4, 4, 64206; CHECK-P9-NEXT:    stxv 2, -16(6)207; CHECK-P9-NEXT:    lxv 2, 0(5)208; CHECK-P9-NEXT:    vmuluwm 2, 3, 2209; CHECK-P9-NEXT:    lxv 3, 16(3)210; CHECK-P9-NEXT:    addi 3, 3, 64211; CHECK-P9-NEXT:    vadduwm 3, 4, 3212; CHECK-P9-NEXT:    stxv 2, 0(6)213; CHECK-P9-NEXT:    lxv 2, 16(5)214; CHECK-P9-NEXT:    addi 5, 5, 64215; CHECK-P9-NEXT:    vmuluwm 2, 3, 2216; CHECK-P9-NEXT:    stxv 2, 16(6)217; CHECK-P9-NEXT:    addi 6, 6, 64218; CHECK-P9-NEXT:    bdnz .LBB0_1219; CHECK-P9-NEXT:  # %bb.2: # %for.end220; CHECK-P9-NEXT:    blr221;222; NOOPTSWAP-P9-LABEL: foo:223; NOOPTSWAP-P9:       # %bb.0: # %entry224; NOOPTSWAP-P9-NEXT:    addis 4, 2, .LC0@toc@ha225; NOOPTSWAP-P9-NEXT:    addis 5, 2, .LC1@toc@ha226; NOOPTSWAP-P9-NEXT:    addis 6, 2, .LC2@toc@ha227; NOOPTSWAP-P9-NEXT:    addis 7, 2, .LC3@toc@ha228; NOOPTSWAP-P9-NEXT:    std 30, -16(1) # 8-byte Folded Spill229; NOOPTSWAP-P9-NEXT:    ld 4, .LC0@toc@l(4)230; NOOPTSWAP-P9-NEXT:    li 3, 256231; NOOPTSWAP-P9-NEXT:    ld 5, .LC1@toc@l(5)232; NOOPTSWAP-P9-NEXT:    ld 6, .LC2@toc@l(6)233; NOOPTSWAP-P9-NEXT:    ld 7, .LC3@toc@l(7)234; NOOPTSWAP-P9-NEXT:    mtctr 3235; NOOPTSWAP-P9-NEXT:    li 3, 0236; NOOPTSWAP-P9-NEXT:    li 8, 16237; NOOPTSWAP-P9-NEXT:    li 9, 32238; NOOPTSWAP-P9-NEXT:    li 10, 48239; NOOPTSWAP-P9-NEXT:    .p2align 4240; NOOPTSWAP-P9-NEXT:  .LBB0_1: # %vector.body241; NOOPTSWAP-P9-NEXT:    #242; NOOPTSWAP-P9-NEXT:    lxvd2x 0, 4, 3243; NOOPTSWAP-P9-NEXT:    lxvd2x 1, 5, 3244; NOOPTSWAP-P9-NEXT:    lxvd2x 2, 6, 3245; NOOPTSWAP-P9-NEXT:    add 12, 5, 3246; NOOPTSWAP-P9-NEXT:    add 11, 4, 3247; NOOPTSWAP-P9-NEXT:    add 30, 6, 3248; NOOPTSWAP-P9-NEXT:    lxvd2x 3, 11, 8249; NOOPTSWAP-P9-NEXT:    xxswapd 34, 0250; NOOPTSWAP-P9-NEXT:    xxswapd 35, 1251; NOOPTSWAP-P9-NEXT:    lxvd2x 0, 12, 8252; NOOPTSWAP-P9-NEXT:    xxswapd 36, 2253; NOOPTSWAP-P9-NEXT:    lxvd2x 1, 11, 9254; NOOPTSWAP-P9-NEXT:    vadduwm 2, 3, 2255; NOOPTSWAP-P9-NEXT:    xxswapd 35, 3256; NOOPTSWAP-P9-NEXT:    vmuluwm 2, 2, 4257; NOOPTSWAP-P9-NEXT:    xxswapd 36, 0258; NOOPTSWAP-P9-NEXT:    lxvd2x 0, 12, 9259; NOOPTSWAP-P9-NEXT:    vadduwm 3, 4, 3260; NOOPTSWAP-P9-NEXT:    xxswapd 36, 1261; NOOPTSWAP-P9-NEXT:    lxvd2x 1, 12, 10262; NOOPTSWAP-P9-NEXT:    xxswapd 37, 0263; NOOPTSWAP-P9-NEXT:    lxvd2x 0, 11, 10264; NOOPTSWAP-P9-NEXT:    add 11, 7, 3265; NOOPTSWAP-P9-NEXT:    vadduwm 4, 5, 4266; NOOPTSWAP-P9-NEXT:    xxswapd 32, 1267; NOOPTSWAP-P9-NEXT:    xxswapd 37, 0268; NOOPTSWAP-P9-NEXT:    lxvd2x 0, 30, 8269; NOOPTSWAP-P9-NEXT:    vadduwm 5, 0, 5270; NOOPTSWAP-P9-NEXT:    xxswapd 32, 0271; NOOPTSWAP-P9-NEXT:    lxvd2x 0, 30, 9272; NOOPTSWAP-P9-NEXT:    vmuluwm 3, 3, 0273; NOOPTSWAP-P9-NEXT:    xxswapd 32, 0274; NOOPTSWAP-P9-NEXT:    xxswapd 0, 34275; NOOPTSWAP-P9-NEXT:    vmuluwm 4, 4, 0276; NOOPTSWAP-P9-NEXT:    stxvd2x 0, 7, 3277; NOOPTSWAP-P9-NEXT:    addi 3, 3, 64278; NOOPTSWAP-P9-NEXT:    xxswapd 1, 35279; NOOPTSWAP-P9-NEXT:    stxvd2x 1, 11, 8280; NOOPTSWAP-P9-NEXT:    xxswapd 0, 36281; NOOPTSWAP-P9-NEXT:    stxvd2x 0, 11, 9282; NOOPTSWAP-P9-NEXT:    lxvd2x 0, 30, 10283; NOOPTSWAP-P9-NEXT:    xxswapd 34, 0284; NOOPTSWAP-P9-NEXT:    vmuluwm 2, 5, 2285; NOOPTSWAP-P9-NEXT:    xxswapd 0, 34286; NOOPTSWAP-P9-NEXT:    stxvd2x 0, 11, 10287; NOOPTSWAP-P9-NEXT:    bdnz .LBB0_1288; NOOPTSWAP-P9-NEXT:  # %bb.2: # %for.end289; NOOPTSWAP-P9-NEXT:    ld 30, -16(1) # 8-byte Folded Reload290; NOOPTSWAP-P9-NEXT:    blr291entry:292  br label %vector.body293 294vector.body:295  %index = phi i64 [ 0, %entry ], [ %index.next.3, %vector.body ]296  %0 = getelementptr inbounds [4096 x i32], ptr @cb, i64 0, i64 %index297  %wide.load = load <4 x i32>, ptr %0, align 8298  %1 = getelementptr inbounds [4096 x i32], ptr @cc, i64 0, i64 %index299  %wide.load13 = load <4 x i32>, ptr %1, align 8300  %2 = add nsw <4 x i32> %wide.load13, %wide.load301  %3 = getelementptr inbounds [4096 x i32], ptr @cd, i64 0, i64 %index302  %wide.load14 = load <4 x i32>, ptr %3, align 8303  %4 = mul nsw <4 x i32> %2, %wide.load14304  %5 = getelementptr inbounds [4096 x i32], ptr @ca, i64 0, i64 %index305  store <4 x i32> %4, ptr %5, align 8306  %index.next = add nuw nsw i64 %index, 4307  %6 = getelementptr inbounds [4096 x i32], ptr @cb, i64 0, i64 %index.next308  %wide.load.1 = load <4 x i32>, ptr %6, align 8309  %7 = getelementptr inbounds [4096 x i32], ptr @cc, i64 0, i64 %index.next310  %wide.load13.1 = load <4 x i32>, ptr %7, align 8311  %8 = add nsw <4 x i32> %wide.load13.1, %wide.load.1312  %9 = getelementptr inbounds [4096 x i32], ptr @cd, i64 0, i64 %index.next313  %wide.load14.1 = load <4 x i32>, ptr %9, align 8314  %10 = mul nsw <4 x i32> %8, %wide.load14.1315  %11 = getelementptr inbounds [4096 x i32], ptr @ca, i64 0, i64 %index.next316  store <4 x i32> %10, ptr %11, align 8317  %index.next.1 = add nuw nsw i64 %index.next, 4318  %12 = getelementptr inbounds [4096 x i32], ptr @cb, i64 0, i64 %index.next.1319  %wide.load.2 = load <4 x i32>, ptr %12, align 8320  %13 = getelementptr inbounds [4096 x i32], ptr @cc, i64 0, i64 %index.next.1321  %wide.load13.2 = load <4 x i32>, ptr %13, align 8322  %14 = add nsw <4 x i32> %wide.load13.2, %wide.load.2323  %15 = getelementptr inbounds [4096 x i32], ptr @cd, i64 0, i64 %index.next.1324  %wide.load14.2 = load <4 x i32>, ptr %15, align 8325  %16 = mul nsw <4 x i32> %14, %wide.load14.2326  %17 = getelementptr inbounds [4096 x i32], ptr @ca, i64 0, i64 %index.next.1327  store <4 x i32> %16, ptr %17, align 8328  %index.next.2 = add nuw nsw i64 %index.next.1, 4329  %18 = getelementptr inbounds [4096 x i32], ptr @cb, i64 0, i64 %index.next.2330  %wide.load.3 = load <4 x i32>, ptr %18, align 8331  %19 = getelementptr inbounds [4096 x i32], ptr @cc, i64 0, i64 %index.next.2332  %wide.load13.3 = load <4 x i32>, ptr %19, align 8333  %20 = add nsw <4 x i32> %wide.load13.3, %wide.load.3334  %21 = getelementptr inbounds [4096 x i32], ptr @cd, i64 0, i64 %index.next.2335  %wide.load14.3 = load <4 x i32>, ptr %21, align 8336  %22 = mul nsw <4 x i32> %20, %wide.load14.3337  %23 = getelementptr inbounds [4096 x i32], ptr @ca, i64 0, i64 %index.next.2338  store <4 x i32> %22, ptr %23, align 8339  %index.next.3 = add nuw nsw i64 %index.next.2, 4340  %24 = icmp eq i64 %index.next.3, 4096341  br i1 %24, label %for.end, label %vector.body342 343for.end:344  ret void345}346