brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.8 KiB · 4df61da Raw
344 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+xtheadmempair -verify-machineinstrs < %s \3; RUN:   | FileCheck %s -check-prefix=RV32XTHEADMEMPAIR4; RUN: llc -mtriple=riscv64 -mattr=+xtheadmempair -verify-machineinstrs < %s \5; RUN:   | FileCheck %s -check-prefix=RV64XTHEADMEMPAIR6 7define i64 @lwd(ptr %a) {8; RV32XTHEADMEMPAIR-LABEL: lwd:9; RV32XTHEADMEMPAIR:       # %bb.0:10; RV32XTHEADMEMPAIR-NEXT:    th.lwd a1, a2, (a0), 2, 311; RV32XTHEADMEMPAIR-NEXT:    srai a3, a1, 3112; RV32XTHEADMEMPAIR-NEXT:    srai a4, a2, 3113; RV32XTHEADMEMPAIR-NEXT:    add a0, a1, a214; RV32XTHEADMEMPAIR-NEXT:    sltu a1, a0, a115; RV32XTHEADMEMPAIR-NEXT:    add a3, a3, a416; RV32XTHEADMEMPAIR-NEXT:    add a1, a3, a117; RV32XTHEADMEMPAIR-NEXT:    ret18;19; RV64XTHEADMEMPAIR-LABEL: lwd:20; RV64XTHEADMEMPAIR:       # %bb.0:21; RV64XTHEADMEMPAIR-NEXT:    th.lwd a1, a2, (a0), 2, 322; RV64XTHEADMEMPAIR-NEXT:    add a0, a1, a223; RV64XTHEADMEMPAIR-NEXT:    ret24  %1 = getelementptr i32, ptr %a, i64 425  %2 = load i32, ptr %1, align 426  %3 = getelementptr i32, ptr %a, i64 527  %4 = load i32, ptr %3, align 428  %5 = sext i32 %2 to i6429  %6 = sext i32 %4 to i6430  %7 = add i64 %5, %631  ret i64 %732}33 34define i64 @lwud(ptr %a) {35; RV32XTHEADMEMPAIR-LABEL: lwud:36; RV32XTHEADMEMPAIR:       # %bb.0:37; RV32XTHEADMEMPAIR-NEXT:    th.lwd a1, a2, (a0), 2, 338; RV32XTHEADMEMPAIR-NEXT:    add a0, a1, a239; RV32XTHEADMEMPAIR-NEXT:    sltu a1, a0, a140; RV32XTHEADMEMPAIR-NEXT:    ret41;42; RV64XTHEADMEMPAIR-LABEL: lwud:43; RV64XTHEADMEMPAIR:       # %bb.0:44; RV64XTHEADMEMPAIR-NEXT:    th.lwud a1, a2, (a0), 2, 345; RV64XTHEADMEMPAIR-NEXT:    add a0, a1, a246; RV64XTHEADMEMPAIR-NEXT:    ret47  %1 = getelementptr i32, ptr %a, i64 448  %2 = load i32, ptr %1, align 449  %3 = getelementptr i32, ptr %a, i64 550  %4 = load i32, ptr %3, align 451  %5 = zext i32 %2 to i6452  %6 = zext i32 %4 to i6453  %7 = add i64 %5, %654  ret i64 %755}56 57define i64 @ldd(ptr %a) {58; RV32XTHEADMEMPAIR-LABEL: ldd:59; RV32XTHEADMEMPAIR:       # %bb.0:60; RV32XTHEADMEMPAIR-NEXT:    lw a1, 32(a0)61; RV32XTHEADMEMPAIR-NEXT:    lw a2, 36(a0)62; RV32XTHEADMEMPAIR-NEXT:    lw a3, 44(a0)63; RV32XTHEADMEMPAIR-NEXT:    lw a0, 40(a0)64; RV32XTHEADMEMPAIR-NEXT:    add a2, a2, a365; RV32XTHEADMEMPAIR-NEXT:    add a0, a1, a066; RV32XTHEADMEMPAIR-NEXT:    sltu a1, a0, a167; RV32XTHEADMEMPAIR-NEXT:    add a1, a2, a168; RV32XTHEADMEMPAIR-NEXT:    ret69;70; RV64XTHEADMEMPAIR-LABEL: ldd:71; RV64XTHEADMEMPAIR:       # %bb.0:72; RV64XTHEADMEMPAIR-NEXT:    th.ldd a1, a2, (a0), 2, 473; RV64XTHEADMEMPAIR-NEXT:    add a0, a1, a274; RV64XTHEADMEMPAIR-NEXT:    ret75  %1 = getelementptr i64, ptr %a, i64 476  %2 = load i64, ptr %1, align 877  %3 = getelementptr i64, ptr %a, i64 578  %4 = load i64, ptr %3, align 879  %5 = add i64 %2, %480  ret i64 %581}82 83define i64 @lwd_0(ptr %a) {84; RV32XTHEADMEMPAIR-LABEL: lwd_0:85; RV32XTHEADMEMPAIR:       # %bb.0:86; RV32XTHEADMEMPAIR-NEXT:    th.lwd a1, a2, (a0), 0, 387; RV32XTHEADMEMPAIR-NEXT:    srai a3, a1, 3188; RV32XTHEADMEMPAIR-NEXT:    srai a4, a2, 3189; RV32XTHEADMEMPAIR-NEXT:    add a0, a1, a290; RV32XTHEADMEMPAIR-NEXT:    sltu a1, a0, a191; RV32XTHEADMEMPAIR-NEXT:    add a3, a3, a492; RV32XTHEADMEMPAIR-NEXT:    add a1, a3, a193; RV32XTHEADMEMPAIR-NEXT:    ret94;95; RV64XTHEADMEMPAIR-LABEL: lwd_0:96; RV64XTHEADMEMPAIR:       # %bb.0:97; RV64XTHEADMEMPAIR-NEXT:    th.lwd a1, a2, (a0), 0, 398; RV64XTHEADMEMPAIR-NEXT:    add a0, a1, a299; RV64XTHEADMEMPAIR-NEXT:    ret100  %1 = getelementptr i32, ptr %a, i64 0101  %2 = load i32, ptr %1, align 4102  %3 = getelementptr i32, ptr %a, i64 1103  %4 = load i32, ptr %3, align 4104  %5 = sext i32 %2 to i64105  %6 = sext i32 %4 to i64106  %7 = add i64 %5, %6107  ret i64 %7108}109 110define i64 @lwud_0(ptr %a) {111; RV32XTHEADMEMPAIR-LABEL: lwud_0:112; RV32XTHEADMEMPAIR:       # %bb.0:113; RV32XTHEADMEMPAIR-NEXT:    th.lwd a1, a2, (a0), 0, 3114; RV32XTHEADMEMPAIR-NEXT:    add a0, a1, a2115; RV32XTHEADMEMPAIR-NEXT:    sltu a1, a0, a1116; RV32XTHEADMEMPAIR-NEXT:    ret117;118; RV64XTHEADMEMPAIR-LABEL: lwud_0:119; RV64XTHEADMEMPAIR:       # %bb.0:120; RV64XTHEADMEMPAIR-NEXT:    th.lwud a1, a2, (a0), 0, 3121; RV64XTHEADMEMPAIR-NEXT:    add a0, a1, a2122; RV64XTHEADMEMPAIR-NEXT:    ret123  %1 = getelementptr i32, ptr %a, i64 0124  %2 = load i32, ptr %1, align 4125  %3 = getelementptr i32, ptr %a, i64 1126  %4 = load i32, ptr %3, align 4127  %5 = zext i32 %2 to i64128  %6 = zext i32 %4 to i64129  %7 = add i64 %5, %6130  ret i64 %7131}132 133define i64 @ldd_0(ptr %a) {134; RV32XTHEADMEMPAIR-LABEL: ldd_0:135; RV32XTHEADMEMPAIR:       # %bb.0:136; RV32XTHEADMEMPAIR-NEXT:    th.lwd a1, a2, (a0), 0, 3137; RV32XTHEADMEMPAIR-NEXT:    th.lwd a3, a4, (a0), 1, 3138; RV32XTHEADMEMPAIR-NEXT:    add a2, a2, a4139; RV32XTHEADMEMPAIR-NEXT:    add a0, a1, a3140; RV32XTHEADMEMPAIR-NEXT:    sltu a1, a0, a1141; RV32XTHEADMEMPAIR-NEXT:    add a1, a2, a1142; RV32XTHEADMEMPAIR-NEXT:    ret143;144; RV64XTHEADMEMPAIR-LABEL: ldd_0:145; RV64XTHEADMEMPAIR:       # %bb.0:146; RV64XTHEADMEMPAIR-NEXT:    th.ldd a1, a2, (a0), 0, 4147; RV64XTHEADMEMPAIR-NEXT:    add a0, a1, a2148; RV64XTHEADMEMPAIR-NEXT:    ret149  %1 = getelementptr i64, ptr %a, i64 0150  %2 = load i64, ptr %1, align 8151  %3 = getelementptr i64, ptr %a, i64 1152  %4 = load i64, ptr %3, align 8153  %5 = add i64 %2, %4154  ret i64 %5155}156 157define void @swd(ptr %a, i32 %b, i32%c) {158; RV32XTHEADMEMPAIR-LABEL: swd:159; RV32XTHEADMEMPAIR:       # %bb.0:160; RV32XTHEADMEMPAIR-NEXT:    th.swd a1, a2, (a0), 2, 3161; RV32XTHEADMEMPAIR-NEXT:    ret162;163; RV64XTHEADMEMPAIR-LABEL: swd:164; RV64XTHEADMEMPAIR:       # %bb.0:165; RV64XTHEADMEMPAIR-NEXT:    th.swd a1, a2, (a0), 2, 3166; RV64XTHEADMEMPAIR-NEXT:    ret167  %1 = getelementptr i32, ptr %a, i64 4168  store i32 %b, ptr %1, align 4169  %2 = getelementptr i32, ptr %a, i64 5170  store i32 %c, ptr %2, align 4171  ret void172}173 174define void @sdd(ptr %a, i64 %b, i64%c) {175; RV32XTHEADMEMPAIR-LABEL: sdd:176; RV32XTHEADMEMPAIR:       # %bb.0:177; RV32XTHEADMEMPAIR-NEXT:    sw a1, 32(a0)178; RV32XTHEADMEMPAIR-NEXT:    sw a2, 36(a0)179; RV32XTHEADMEMPAIR-NEXT:    sw a3, 40(a0)180; RV32XTHEADMEMPAIR-NEXT:    sw a4, 44(a0)181; RV32XTHEADMEMPAIR-NEXT:    ret182;183; RV64XTHEADMEMPAIR-LABEL: sdd:184; RV64XTHEADMEMPAIR:       # %bb.0:185; RV64XTHEADMEMPAIR-NEXT:    th.sdd a1, a2, (a0), 2, 4186; RV64XTHEADMEMPAIR-NEXT:    ret187  %1 = getelementptr i64, ptr %a, i64 4188  store i64 %b, ptr %1, align 8189  %2 = getelementptr i64, ptr %a, i64 5190  store i64 %c, ptr %2, align 8191  ret void192}193 194define void @swd_0(ptr %a, i32 %b, i32%c) {195; RV32XTHEADMEMPAIR-LABEL: swd_0:196; RV32XTHEADMEMPAIR:       # %bb.0:197; RV32XTHEADMEMPAIR-NEXT:    th.swd a1, a2, (a0), 0, 3198; RV32XTHEADMEMPAIR-NEXT:    ret199;200; RV64XTHEADMEMPAIR-LABEL: swd_0:201; RV64XTHEADMEMPAIR:       # %bb.0:202; RV64XTHEADMEMPAIR-NEXT:    th.swd a1, a2, (a0), 0, 3203; RV64XTHEADMEMPAIR-NEXT:    ret204  %1 = getelementptr i32, ptr %a, i64 0205  store i32 %b, ptr %1, align 4206  %2 = getelementptr i32, ptr %a, i64 1207  store i32 %c, ptr %2, align 4208  ret void209}210 211define void @sdd_0(ptr %a, i64 %b, i64%c) {212; RV32XTHEADMEMPAIR-LABEL: sdd_0:213; RV32XTHEADMEMPAIR:       # %bb.0:214; RV32XTHEADMEMPAIR-NEXT:    th.swd a1, a2, (a0), 0, 3215; RV32XTHEADMEMPAIR-NEXT:    th.swd a3, a4, (a0), 1, 3216; RV32XTHEADMEMPAIR-NEXT:    ret217;218; RV64XTHEADMEMPAIR-LABEL: sdd_0:219; RV64XTHEADMEMPAIR:       # %bb.0:220; RV64XTHEADMEMPAIR-NEXT:    th.sdd a1, a2, (a0), 0, 4221; RV64XTHEADMEMPAIR-NEXT:    ret222  %1 = getelementptr i64, ptr %a, i64 0223  store i64 %b, ptr %1, align 8224  %2 = getelementptr i64, ptr %a, i64 1225  store i64 %c, ptr %2, align 8226  ret void227}228 229define i64 @ld64(ptr %a) {230; RV32XTHEADMEMPAIR-LABEL: ld64:231; RV32XTHEADMEMPAIR:       # %bb.0:232; RV32XTHEADMEMPAIR-NEXT:    th.lwd a2, a1, (a0), 0, 3233; RV32XTHEADMEMPAIR-NEXT:    mv a0, a2234; RV32XTHEADMEMPAIR-NEXT:    ret235;236; RV64XTHEADMEMPAIR-LABEL: ld64:237; RV64XTHEADMEMPAIR:       # %bb.0:238; RV64XTHEADMEMPAIR-NEXT:    ld a0, 0(a0)239; RV64XTHEADMEMPAIR-NEXT:    ret240  %1 = getelementptr i64, ptr %a, i64 0241  %2 = load i64, ptr %1, align 8242  ret i64 %2243}244 245define i128 @ld128(ptr %a) {246; RV32XTHEADMEMPAIR-LABEL: ld128:247; RV32XTHEADMEMPAIR:       # %bb.0:248; RV32XTHEADMEMPAIR-NEXT:    th.lwd a2, a3, (a1), 1, 3249; RV32XTHEADMEMPAIR-NEXT:    th.lwd a4, a5, (a1), 0, 3250; RV32XTHEADMEMPAIR-NEXT:    th.swd a2, a3, (a0), 1, 3251; RV32XTHEADMEMPAIR-NEXT:    th.swd a4, a5, (a0), 0, 3252; RV32XTHEADMEMPAIR-NEXT:    ret253;254; RV64XTHEADMEMPAIR-LABEL: ld128:255; RV64XTHEADMEMPAIR:       # %bb.0:256; RV64XTHEADMEMPAIR-NEXT:    th.ldd a2, a1, (a0), 0, 4257; RV64XTHEADMEMPAIR-NEXT:    mv a0, a2258; RV64XTHEADMEMPAIR-NEXT:    ret259  %1 = getelementptr i128, ptr %a, i64 0260  %2 = load i128, ptr %1, align 8261  ret i128 %2262}263 264define void @sd64(ptr %a, i64 %b) {265; RV32XTHEADMEMPAIR-LABEL: sd64:266; RV32XTHEADMEMPAIR:       # %bb.0:267; RV32XTHEADMEMPAIR-NEXT:    th.swd a1, a2, (a0), 0, 3268; RV32XTHEADMEMPAIR-NEXT:    ret269;270; RV64XTHEADMEMPAIR-LABEL: sd64:271; RV64XTHEADMEMPAIR:       # %bb.0:272; RV64XTHEADMEMPAIR-NEXT:    sd a1, 0(a0)273; RV64XTHEADMEMPAIR-NEXT:    ret274  %1 = getelementptr i64, ptr %a, i64 0275  store i64 %b, ptr %1, align 8276  ret void277}278 279define void @sd128(ptr %a, i128 %b) {280; RV32XTHEADMEMPAIR-LABEL: sd128:281; RV32XTHEADMEMPAIR:       # %bb.0:282; RV32XTHEADMEMPAIR-NEXT:    th.lwd a2, a3, (a1), 1, 3283; RV32XTHEADMEMPAIR-NEXT:    th.lwd a4, a5, (a1), 0, 3284; RV32XTHEADMEMPAIR-NEXT:    th.swd a2, a3, (a0), 1, 3285; RV32XTHEADMEMPAIR-NEXT:    th.swd a4, a5, (a0), 0, 3286; RV32XTHEADMEMPAIR-NEXT:    ret287;288; RV64XTHEADMEMPAIR-LABEL: sd128:289; RV64XTHEADMEMPAIR:       # %bb.0:290; RV64XTHEADMEMPAIR-NEXT:    th.sdd a1, a2, (a0), 0, 4291; RV64XTHEADMEMPAIR-NEXT:    ret292  %1 = getelementptr i128, ptr %a, i64 0293  store i128 %b, ptr %1, align 8294  ret void295}296 297define i32 @lh(ptr %a) {298; RV32XTHEADMEMPAIR-LABEL: lh:299; RV32XTHEADMEMPAIR:       # %bb.0:300; RV32XTHEADMEMPAIR-NEXT:    lh a1, 0(a0)301; RV32XTHEADMEMPAIR-NEXT:    lh a0, 2(a0)302; RV32XTHEADMEMPAIR-NEXT:    add a0, a1, a0303; RV32XTHEADMEMPAIR-NEXT:    ret304;305; RV64XTHEADMEMPAIR-LABEL: lh:306; RV64XTHEADMEMPAIR:       # %bb.0:307; RV64XTHEADMEMPAIR-NEXT:    lh a1, 0(a0)308; RV64XTHEADMEMPAIR-NEXT:    lh a0, 2(a0)309; RV64XTHEADMEMPAIR-NEXT:    add a0, a1, a0310; RV64XTHEADMEMPAIR-NEXT:    ret311  %1 = getelementptr i16, ptr %a, i64 0312  %2 = load i16, ptr %1, align 4313  %3 = getelementptr i16, ptr %a, i64 1314  %4 = load i16, ptr %3, align 4315  %5 = sext i16 %2 to i32316  %6 = sext i16 %4 to i32317  %7 = add i32 %5, %6318  ret i32 %7319}320 321define i32 @lb(ptr %a) {322; RV32XTHEADMEMPAIR-LABEL: lb:323; RV32XTHEADMEMPAIR:       # %bb.0:324; RV32XTHEADMEMPAIR-NEXT:    lb a1, 0(a0)325; RV32XTHEADMEMPAIR-NEXT:    lb a0, 1(a0)326; RV32XTHEADMEMPAIR-NEXT:    add a0, a1, a0327; RV32XTHEADMEMPAIR-NEXT:    ret328;329; RV64XTHEADMEMPAIR-LABEL: lb:330; RV64XTHEADMEMPAIR:       # %bb.0:331; RV64XTHEADMEMPAIR-NEXT:    lb a1, 0(a0)332; RV64XTHEADMEMPAIR-NEXT:    lb a0, 1(a0)333; RV64XTHEADMEMPAIR-NEXT:    add a0, a1, a0334; RV64XTHEADMEMPAIR-NEXT:    ret335  %1 = getelementptr i8, ptr %a, i64 0336  %2 = load i8, ptr %1, align 4337  %3 = getelementptr i8, ptr %a, i64 1338  %4 = load i8, ptr %3, align 4339  %5 = sext i8 %2 to i32340  %6 = sext i8 %4 to i32341  %7 = add i32 %5, %6342  ret i32 %7343}344