brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.4 KiB · 838df34 Raw
390 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 32; RUN: llc < %s -O2 -mtriple=aarch64 -mcpu=ampere1 | FileCheck %s --check-prefixes=CHECK3; RUN: llc < %s -O2 -mtriple=aarch64 -mcpu=ampere1a | FileCheck %s --check-prefixes=CHECK4; RUN: llc < %s -O2 -mtriple=aarch64 | FileCheck %s --check-prefixes=CHECK-DEFAULT5; RUN: llc < %s -O2 -mtriple=aarch64 -mcpu=ampere1 -mattr=+disable-ldp | FileCheck %s --check-prefixes=CHECK-DISABLE-LDP6; RUN: llc < %s -O2 -mtriple=aarch64 -mcpu=ampere1 -mattr=+disable-stp | FileCheck %s --check-prefixes=CHECK-DISABLE-STP7; RUN: llc < %s -O2 -mtriple=aarch64 -mcpu=ampere1a -mattr=+disable-ldp | FileCheck %s --check-prefixes=CHECK-DISABLE-LDP8; RUN: llc < %s -O2 -mtriple=aarch64 -mcpu=ampere1a -mattr=+disable-stp | FileCheck %s --check-prefixes=CHECK-DISABLE-STP9 10define i32 @ldp_aligned_int32_t(ptr %0) #0 {11; CHECK-LABEL: ldp_aligned_int32_t:12; CHECK:       // %bb.0:13; CHECK-NEXT:    and x8, x0, #0xffffffffffffffc014; CHECK-NEXT:    ldp w9, w8, [x8]15; CHECK-NEXT:    add w0, w8, w916; CHECK-NEXT:    ret17;18; CHECK-DEFAULT-LABEL: ldp_aligned_int32_t:19; CHECK-DEFAULT:       // %bb.0:20; CHECK-DEFAULT-NEXT:    and x8, x0, #0xffffffffffffffc021; CHECK-DEFAULT-NEXT:    ldp w9, w8, [x8]22; CHECK-DEFAULT-NEXT:    add w0, w8, w923; CHECK-DEFAULT-NEXT:    ret24;25; CHECK-DISABLE-LDP-LABEL: ldp_aligned_int32_t:26; CHECK-DISABLE-LDP:       // %bb.0:27; CHECK-DISABLE-LDP-NEXT:    and x8, x0, #0xffffffffffffffc028; CHECK-DISABLE-LDP-NEXT:    ldr w9, [x8]29; CHECK-DISABLE-LDP-NEXT:    ldr w8, [x8, #4]30; CHECK-DISABLE-LDP-NEXT:    add w0, w8, w931; CHECK-DISABLE-LDP-NEXT:    ret32  %2 = ptrtoint ptr %0 to i6433  %3 = and i64 %2, -6434  %4 = inttoptr i64 %3 to ptr35  %5 = load i32, ptr %4, align 6436  %6 = getelementptr inbounds i32, ptr %4, i64 137  %7 = load i32, ptr %6, align 438  %8 = add nsw i32 %7, %539  ret i32 %840}41 42define i64 @ldp_aligned_int64_t(ptr %0) #0 {43; CHECK-LABEL: ldp_aligned_int64_t:44; CHECK:       // %bb.0:45; CHECK-NEXT:    and x8, x0, #0xffffffffffffff8046; CHECK-NEXT:    ldp x9, x8, [x8]47; CHECK-NEXT:    add x0, x8, x948; CHECK-NEXT:    ret49;50; CHECK-DEFAULT-LABEL: ldp_aligned_int64_t:51; CHECK-DEFAULT:       // %bb.0:52; CHECK-DEFAULT-NEXT:    and x8, x0, #0xffffffffffffff8053; CHECK-DEFAULT-NEXT:    ldp x9, x8, [x8]54; CHECK-DEFAULT-NEXT:    add x0, x8, x955; CHECK-DEFAULT-NEXT:    ret56;57; CHECK-DISABLE-LDP-LABEL: ldp_aligned_int64_t:58; CHECK-DISABLE-LDP:       // %bb.0:59; CHECK-DISABLE-LDP-NEXT:    and x8, x0, #0xffffffffffffff8060; CHECK-DISABLE-LDP-NEXT:    ldr x9, [x8]61; CHECK-DISABLE-LDP-NEXT:    ldr x8, [x8, #8]62; CHECK-DISABLE-LDP-NEXT:    add x0, x8, x963; CHECK-DISABLE-LDP-NEXT:    ret64  %2 = ptrtoint ptr %0 to i6465  %3 = and i64 %2, -12866  %4 = inttoptr i64 %3 to ptr67  %5 = load i64, ptr %4, align 12868  %6 = getelementptr inbounds i64, ptr %4, i64 169  %7 = load i64, ptr %6, align 870  %8 = add nsw i64 %7, %571  ret i64 %872}73 74define <4 x i32> @ldp_aligned_v4si(ptr %0) #0 {75; CHECK-LABEL: ldp_aligned_v4si:76; CHECK:       // %bb.0:77; CHECK-NEXT:    and x8, x0, #0xffffffffffffff0078; CHECK-NEXT:    ldp q0, q1, [x8]79; CHECK-NEXT:    add v0.4s, v1.4s, v0.4s80; CHECK-NEXT:    ret81;82; CHECK-DEFAULT-LABEL: ldp_aligned_v4si:83; CHECK-DEFAULT:       // %bb.0:84; CHECK-DEFAULT-NEXT:    and x8, x0, #0xffffffffffffff0085; CHECK-DEFAULT-NEXT:    ldp q0, q1, [x8]86; CHECK-DEFAULT-NEXT:    add v0.4s, v1.4s, v0.4s87; CHECK-DEFAULT-NEXT:    ret88;89; CHECK-DISABLE-LDP-LABEL: ldp_aligned_v4si:90; CHECK-DISABLE-LDP:       // %bb.0:91; CHECK-DISABLE-LDP-NEXT:    and x8, x0, #0xffffffffffffff0092; CHECK-DISABLE-LDP-NEXT:    ldr q0, [x8]93; CHECK-DISABLE-LDP-NEXT:    ldr q1, [x8, #16]94; CHECK-DISABLE-LDP-NEXT:    add v0.4s, v1.4s, v0.4s95; CHECK-DISABLE-LDP-NEXT:    ret96  %2 = ptrtoint ptr %0 to i6497  %3 = and i64 %2, -25698  %4 = inttoptr i64 %3 to ptr99  %5 = load <4 x i32>, ptr %4, align 256100  %6 = getelementptr inbounds <4 x i32>, ptr %4, i64 1101  %7 = load <4 x i32>, ptr %6, align 16102  %8 = add <4 x i32> %7, %5103  ret <4 x i32> %8104}105 106define i32 @ldp_unaligned_int32_t(ptr %0) #0 {107; CHECK-LABEL: ldp_unaligned_int32_t:108; CHECK:       // %bb.0:109; CHECK-NEXT:    and x8, x0, #0xffffffffffffffc0110; CHECK-NEXT:    ldr w9, [x8, #4]111; CHECK-NEXT:    ldr w8, [x8, #8]112; CHECK-NEXT:    add w0, w8, w9113; CHECK-NEXT:    ret114;115; CHECK-DEFAULT-LABEL: ldp_unaligned_int32_t:116; CHECK-DEFAULT:       // %bb.0:117; CHECK-DEFAULT-NEXT:    and x8, x0, #0xffffffffffffffc0118; CHECK-DEFAULT-NEXT:    ldp w9, w8, [x8, #4]119; CHECK-DEFAULT-NEXT:    add w0, w8, w9120; CHECK-DEFAULT-NEXT:    ret121;122; CHECK-DISABLE-LDP-LABEL: ldp_unaligned_int32_t:123; CHECK-DISABLE-LDP:       // %bb.0:124; CHECK-DISABLE-LDP-NEXT:    and x8, x0, #0xffffffffffffffc0125; CHECK-DISABLE-LDP-NEXT:    ldr w9, [x8, #4]126; CHECK-DISABLE-LDP-NEXT:    ldr w8, [x8, #8]127; CHECK-DISABLE-LDP-NEXT:    add w0, w8, w9128; CHECK-DISABLE-LDP-NEXT:    ret129  %2 = ptrtoint ptr %0 to i64130  %3 = and i64 %2, -64131  %4 = inttoptr i64 %3 to ptr132  %5 = getelementptr inbounds i32, ptr %4, i64 1133  %6 = load i32, ptr %5, align 4134  %7 = getelementptr inbounds i32, ptr %4, i64 2135  %8 = load i32, ptr %7, align 8136  %9 = add nsw i32 %8, %6137  ret i32 %9138}139 140define i64 @ldp_unaligned_int64_t(ptr %0) #0 {141; CHECK-LABEL: ldp_unaligned_int64_t:142; CHECK:       // %bb.0:143; CHECK-NEXT:    and x8, x0, #0xffffffffffffff80144; CHECK-NEXT:    ldr x9, [x8, #8]145; CHECK-NEXT:    ldr x8, [x8, #16]146; CHECK-NEXT:    add x0, x8, x9147; CHECK-NEXT:    ret148;149; CHECK-DEFAULT-LABEL: ldp_unaligned_int64_t:150; CHECK-DEFAULT:       // %bb.0:151; CHECK-DEFAULT-NEXT:    and x8, x0, #0xffffffffffffff80152; CHECK-DEFAULT-NEXT:    ldp x9, x8, [x8, #8]153; CHECK-DEFAULT-NEXT:    add x0, x8, x9154; CHECK-DEFAULT-NEXT:    ret155;156; CHECK-DISABLE-LDP-LABEL: ldp_unaligned_int64_t:157; CHECK-DISABLE-LDP:       // %bb.0:158; CHECK-DISABLE-LDP-NEXT:    and x8, x0, #0xffffffffffffff80159; CHECK-DISABLE-LDP-NEXT:    ldr x9, [x8, #8]160; CHECK-DISABLE-LDP-NEXT:    ldr x8, [x8, #16]161; CHECK-DISABLE-LDP-NEXT:    add x0, x8, x9162; CHECK-DISABLE-LDP-NEXT:    ret163  %2 = ptrtoint ptr %0 to i64164  %3 = and i64 %2, -128165  %4 = inttoptr i64 %3 to ptr166  %5 = getelementptr inbounds i64, ptr %4, i64 1167  %6 = load i64, ptr %5, align 8168  %7 = getelementptr inbounds i64, ptr %4, i64 2169  %8 = load i64, ptr %7, align 16170  %9 = add nsw i64 %8, %6171  ret i64 %9172}173 174define <4 x i32> @ldp_unaligned_v4si(ptr %0) #0 {175; CHECK-LABEL: ldp_unaligned_v4si:176; CHECK:       // %bb.0:177; CHECK-NEXT:    and x8, x0, #0xffffffffffffff00178; CHECK-NEXT:    ldr q0, [x8, #16]179; CHECK-NEXT:    ldr q1, [x8, #32]180; CHECK-NEXT:    add v0.4s, v1.4s, v0.4s181; CHECK-NEXT:    ret182;183; CHECK-DEFAULT-LABEL: ldp_unaligned_v4si:184; CHECK-DEFAULT:       // %bb.0:185; CHECK-DEFAULT-NEXT:    and x8, x0, #0xffffffffffffff00186; CHECK-DEFAULT-NEXT:    ldp q0, q1, [x8, #16]187; CHECK-DEFAULT-NEXT:    add v0.4s, v1.4s, v0.4s188; CHECK-DEFAULT-NEXT:    ret189;190; CHECK-DISABLE-LDP-LABEL: ldp_unaligned_v4si:191; CHECK-DISABLE-LDP:       // %bb.0:192; CHECK-DISABLE-LDP-NEXT:    and x8, x0, #0xffffffffffffff00193; CHECK-DISABLE-LDP-NEXT:    ldr q0, [x8, #16]194; CHECK-DISABLE-LDP-NEXT:    ldr q1, [x8, #32]195; CHECK-DISABLE-LDP-NEXT:    add v0.4s, v1.4s, v0.4s196; CHECK-DISABLE-LDP-NEXT:    ret197  %2 = ptrtoint ptr %0 to i64198  %3 = and i64 %2, -256199  %4 = inttoptr i64 %3 to ptr200  %5 = getelementptr inbounds <4 x i32>, ptr %4, i64 1201  %6 = load <4 x i32>, ptr %5, align 16202  %7 = getelementptr inbounds <4 x i32>, ptr %4, i64 2203  %8 = load <4 x i32>, ptr %7, align 32204  %9 = add <4 x i32> %8, %6205  ret <4 x i32> %9206}207 208define ptr @stp_aligned_int32_t(ptr %0, i32 %1) #0 {209; CHECK-LABEL: stp_aligned_int32_t:210; CHECK:       // %bb.0:211; CHECK-NEXT:    and x0, x0, #0xffffffffffffffc0212; CHECK-NEXT:    stp w1, w1, [x0]213; CHECK-NEXT:    ret214;215; CHECK-DEFAULT-LABEL: stp_aligned_int32_t:216; CHECK-DEFAULT:       // %bb.0:217; CHECK-DEFAULT-NEXT:    and x0, x0, #0xffffffffffffffc0218; CHECK-DEFAULT-NEXT:    stp w1, w1, [x0]219; CHECK-DEFAULT-NEXT:    ret220;221; CHECK-DISABLE-STP-LABEL: stp_aligned_int32_t:222; CHECK-DISABLE-STP:       // %bb.0:223; CHECK-DISABLE-STP-NEXT:    and x0, x0, #0xffffffffffffffc0224; CHECK-DISABLE-STP-NEXT:    str w1, [x0]225; CHECK-DISABLE-STP-NEXT:    str w1, [x0, #4]226; CHECK-DISABLE-STP-NEXT:    ret227  %3 = ptrtoint ptr %0 to i64228  %4 = and i64 %3, -64229  %5 = inttoptr i64 %4 to ptr230  store i32 %1, ptr %5, align 64231  %6 = getelementptr inbounds i32, ptr %5, i64 1232  store i32 %1, ptr %6, align 4233  ret ptr %5234}235 236define dso_local ptr @stp_aligned_int64_t(ptr %0, i64 %1) #0 {237; CHECK-LABEL: stp_aligned_int64_t:238; CHECK:       // %bb.0:239; CHECK-NEXT:    and x0, x0, #0xffffffffffffff80240; CHECK-NEXT:    stp x1, x1, [x0]241; CHECK-NEXT:    ret242;243; CHECK-DEFAULT-LABEL: stp_aligned_int64_t:244; CHECK-DEFAULT:       // %bb.0:245; CHECK-DEFAULT-NEXT:    and x0, x0, #0xffffffffffffff80246; CHECK-DEFAULT-NEXT:    stp x1, x1, [x0]247; CHECK-DEFAULT-NEXT:    ret248;249; CHECK-DISABLE-STP-LABEL: stp_aligned_int64_t:250; CHECK-DISABLE-STP:       // %bb.0:251; CHECK-DISABLE-STP-NEXT:    and x0, x0, #0xffffffffffffff80252; CHECK-DISABLE-STP-NEXT:    str x1, [x0]253; CHECK-DISABLE-STP-NEXT:    str x1, [x0, #8]254; CHECK-DISABLE-STP-NEXT:    ret255  %3 = ptrtoint ptr %0 to i64256  %4 = and i64 %3, -128257  %5 = inttoptr i64 %4 to ptr258  store i64 %1, ptr %5, align 128259  %6 = getelementptr inbounds i64, ptr %5, i64 1260  store i64 %1, ptr %6, align 8261  ret ptr %5262}263 264define ptr @stp_aligned_v4si(ptr %0, <4 x i32> %1) #0 {265; CHECK-LABEL: stp_aligned_v4si:266; CHECK:       // %bb.0:267; CHECK-NEXT:    and x0, x0, #0xffffffffffffff00268; CHECK-NEXT:    stp q0, q0, [x0]269; CHECK-NEXT:    ret270;271; CHECK-DEFAULT-LABEL: stp_aligned_v4si:272; CHECK-DEFAULT:       // %bb.0:273; CHECK-DEFAULT-NEXT:    and x0, x0, #0xffffffffffffff00274; CHECK-DEFAULT-NEXT:    stp q0, q0, [x0]275; CHECK-DEFAULT-NEXT:    ret276;277; CHECK-DISABLE-STP-LABEL: stp_aligned_v4si:278; CHECK-DISABLE-STP:       // %bb.0:279; CHECK-DISABLE-STP-NEXT:    and x0, x0, #0xffffffffffffff00280; CHECK-DISABLE-STP-NEXT:    str q0, [x0]281; CHECK-DISABLE-STP-NEXT:    str q0, [x0, #16]282; CHECK-DISABLE-STP-NEXT:    ret283  %3 = ptrtoint ptr %0 to i64284  %4 = and i64 %3, -256285  %5 = inttoptr i64 %4 to ptr286  store <4 x i32> %1, ptr %5, align 256287  %6 = getelementptr inbounds <4 x i32>, ptr %5, i64 1288  store <4 x i32> %1, ptr %6, align 16289  ret ptr %5290}291 292define ptr @stp_unaligned_int32_t(ptr %0, i32 %1) #0 {293; CHECK-LABEL: stp_unaligned_int32_t:294; CHECK:       // %bb.0:295; CHECK-NEXT:    and x8, x0, #0xffffffffffffffc0296; CHECK-NEXT:    orr x0, x8, #0x4297; CHECK-NEXT:    str w1, [x8, #4]298; CHECK-NEXT:    str w1, [x8, #8]299; CHECK-NEXT:    ret300;301; CHECK-DEFAULT-LABEL: stp_unaligned_int32_t:302; CHECK-DEFAULT:       // %bb.0:303; CHECK-DEFAULT-NEXT:    and x8, x0, #0xffffffffffffffc0304; CHECK-DEFAULT-NEXT:    orr x0, x8, #0x4305; CHECK-DEFAULT-NEXT:    stp w1, w1, [x8, #4]306; CHECK-DEFAULT-NEXT:    ret307;308; CHECK-DISABLE-STP-LABEL: stp_unaligned_int32_t:309; CHECK-DISABLE-STP:       // %bb.0:310; CHECK-DISABLE-STP-NEXT:    and x8, x0, #0xffffffffffffffc0311; CHECK-DISABLE-STP-NEXT:    orr x0, x8, #0x4312; CHECK-DISABLE-STP-NEXT:    str w1, [x8, #4]313; CHECK-DISABLE-STP-NEXT:    str w1, [x8, #8]314; CHECK-DISABLE-STP-NEXT:    ret315  %3 = ptrtoint ptr %0 to i64316  %4 = and i64 %3, -64317  %5 = inttoptr i64 %4 to ptr318  %6 = getelementptr inbounds i32, ptr %5, i64 1319  store i32 %1, ptr %6, align 4320  %7 = getelementptr inbounds i32, ptr %5, i64 2321  store i32 %1, ptr %7, align 8322  ret ptr %6323}324 325define ptr @stp_unaligned_int64_t(ptr %0, i64 %1) #0 {326; CHECK-LABEL: stp_unaligned_int64_t:327; CHECK:       // %bb.0:328; CHECK-NEXT:    and x8, x0, #0xffffffffffffff80329; CHECK-NEXT:    orr x0, x8, #0x8330; CHECK-NEXT:    str x1, [x8, #8]331; CHECK-NEXT:    str x1, [x8, #16]332; CHECK-NEXT:    ret333;334; CHECK-DEFAULT-LABEL: stp_unaligned_int64_t:335; CHECK-DEFAULT:       // %bb.0:336; CHECK-DEFAULT-NEXT:    and x8, x0, #0xffffffffffffff80337; CHECK-DEFAULT-NEXT:    orr x0, x8, #0x8338; CHECK-DEFAULT-NEXT:    stp x1, x1, [x8, #8]339; CHECK-DEFAULT-NEXT:    ret340;341; CHECK-DISABLE-STP-LABEL: stp_unaligned_int64_t:342; CHECK-DISABLE-STP:       // %bb.0:343; CHECK-DISABLE-STP-NEXT:    and x8, x0, #0xffffffffffffff80344; CHECK-DISABLE-STP-NEXT:    orr x0, x8, #0x8345; CHECK-DISABLE-STP-NEXT:    str x1, [x8, #8]346; CHECK-DISABLE-STP-NEXT:    str x1, [x8, #16]347; CHECK-DISABLE-STP-NEXT:    ret348  %3 = ptrtoint ptr %0 to i64349  %4 = and i64 %3, -128350  %5 = inttoptr i64 %4 to ptr351  %6 = getelementptr inbounds i64, ptr %5, i64 1352  store i64 %1, ptr %6, align 8353  %7 = getelementptr inbounds i64, ptr %5, i64 2354  store i64 %1, ptr %7, align 16355  ret ptr %6356}357 358define ptr @stp_unaligned_v4si(ptr %0, <4 x i32> %1) #0 {359; CHECK-LABEL: stp_unaligned_v4si:360; CHECK:       // %bb.0:361; CHECK-NEXT:    and x8, x0, #0xffffffffffffff00362; CHECK-NEXT:    orr x0, x8, #0x10363; CHECK-NEXT:    str q0, [x8, #16]364; CHECK-NEXT:    str q0, [x8, #32]365; CHECK-NEXT:    ret366;367; CHECK-DEFAULT-LABEL: stp_unaligned_v4si:368; CHECK-DEFAULT:       // %bb.0:369; CHECK-DEFAULT-NEXT:    and x8, x0, #0xffffffffffffff00370; CHECK-DEFAULT-NEXT:    orr x0, x8, #0x10371; CHECK-DEFAULT-NEXT:    stp q0, q0, [x8, #16]372; CHECK-DEFAULT-NEXT:    ret373;374; CHECK-DISABLE-STP-LABEL: stp_unaligned_v4si:375; CHECK-DISABLE-STP:       // %bb.0:376; CHECK-DISABLE-STP-NEXT:    and x8, x0, #0xffffffffffffff00377; CHECK-DISABLE-STP-NEXT:    orr x0, x8, #0x10378; CHECK-DISABLE-STP-NEXT:    str q0, [x8, #16]379; CHECK-DISABLE-STP-NEXT:    str q0, [x8, #32]380; CHECK-DISABLE-STP-NEXT:    ret381  %3 = ptrtoint ptr %0 to i64382  %4 = and i64 %3, -256383  %5 = inttoptr i64 %4 to ptr384  %6 = getelementptr inbounds <4 x i32>, ptr %5, i64 1385  store <4 x i32> %1, ptr %6, align 16386  %7 = getelementptr inbounds <4 x i32>, ptr %5, i64 2387  store <4 x i32> %1, ptr %7, align 32388  ret ptr %6389}390