brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.6 KiB · dbe28ba Raw
580 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 -mattr=-32s,+d < %s | FileCheck %s --check-prefix=LA32R3; RUN: llc --mtriple=loongarch32 -mattr=+32s,+d < %s | FileCheck %s --check-prefix=LA32S4; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA645 6;; Test sext/zext/trunc7 8define i8 @sext_i1_to_i8(i1 %a) {9; LA32R-LABEL: sext_i1_to_i8:10; LA32R:       # %bb.0:11; LA32R-NEXT:    andi $a0, $a0, 112; LA32R-NEXT:    sub.w $a0, $zero, $a013; LA32R-NEXT:    ret14;15; LA32S-LABEL: sext_i1_to_i8:16; LA32S:       # %bb.0:17; LA32S-NEXT:    andi $a0, $a0, 118; LA32S-NEXT:    sub.w $a0, $zero, $a019; LA32S-NEXT:    ret20;21; LA64-LABEL: sext_i1_to_i8:22; LA64:       # %bb.0:23; LA64-NEXT:    andi $a0, $a0, 124; LA64-NEXT:    sub.d $a0, $zero, $a025; LA64-NEXT:    ret26  %1 = sext i1 %a to i827  ret i8 %128}29 30define i16 @sext_i1_to_i16(i1 %a) {31; LA32R-LABEL: sext_i1_to_i16:32; LA32R:       # %bb.0:33; LA32R-NEXT:    andi $a0, $a0, 134; LA32R-NEXT:    sub.w $a0, $zero, $a035; LA32R-NEXT:    ret36;37; LA32S-LABEL: sext_i1_to_i16:38; LA32S:       # %bb.0:39; LA32S-NEXT:    andi $a0, $a0, 140; LA32S-NEXT:    sub.w $a0, $zero, $a041; LA32S-NEXT:    ret42;43; LA64-LABEL: sext_i1_to_i16:44; LA64:       # %bb.0:45; LA64-NEXT:    andi $a0, $a0, 146; LA64-NEXT:    sub.d $a0, $zero, $a047; LA64-NEXT:    ret48  %1 = sext i1 %a to i1649  ret i16 %150}51 52define i32 @sext_i1_to_i32(i1 %a) {53; LA32R-LABEL: sext_i1_to_i32:54; LA32R:       # %bb.0:55; LA32R-NEXT:    andi $a0, $a0, 156; LA32R-NEXT:    sub.w $a0, $zero, $a057; LA32R-NEXT:    ret58;59; LA32S-LABEL: sext_i1_to_i32:60; LA32S:       # %bb.0:61; LA32S-NEXT:    andi $a0, $a0, 162; LA32S-NEXT:    sub.w $a0, $zero, $a063; LA32S-NEXT:    ret64;65; LA64-LABEL: sext_i1_to_i32:66; LA64:       # %bb.0:67; LA64-NEXT:    andi $a0, $a0, 168; LA64-NEXT:    sub.d $a0, $zero, $a069; LA64-NEXT:    ret70  %1 = sext i1 %a to i3271  ret i32 %172}73 74define i64 @sext_i1_to_i64(i1 %a) {75; LA32R-LABEL: sext_i1_to_i64:76; LA32R:       # %bb.0:77; LA32R-NEXT:    andi $a0, $a0, 178; LA32R-NEXT:    sub.w $a0, $zero, $a079; LA32R-NEXT:    move $a1, $a080; LA32R-NEXT:    ret81;82; LA32S-LABEL: sext_i1_to_i64:83; LA32S:       # %bb.0:84; LA32S-NEXT:    andi $a0, $a0, 185; LA32S-NEXT:    sub.w $a0, $zero, $a086; LA32S-NEXT:    move $a1, $a087; LA32S-NEXT:    ret88;89; LA64-LABEL: sext_i1_to_i64:90; LA64:       # %bb.0:91; LA64-NEXT:    andi $a0, $a0, 192; LA64-NEXT:    sub.d $a0, $zero, $a093; LA64-NEXT:    ret94  %1 = sext i1 %a to i6495  ret i64 %196}97 98define i16 @sext_i8_to_i16(i8 %a) {99; LA32R-LABEL: sext_i8_to_i16:100; LA32R:       # %bb.0:101; LA32R-NEXT:    slli.w $a0, $a0, 24102; LA32R-NEXT:    srai.w $a0, $a0, 24103; LA32R-NEXT:    ret104;105; LA32S-LABEL: sext_i8_to_i16:106; LA32S:       # %bb.0:107; LA32S-NEXT:    ext.w.b $a0, $a0108; LA32S-NEXT:    ret109;110; LA64-LABEL: sext_i8_to_i16:111; LA64:       # %bb.0:112; LA64-NEXT:    ext.w.b $a0, $a0113; LA64-NEXT:    ret114  %1 = sext i8 %a to i16115  ret i16 %1116}117 118define i32 @sext_i8_to_i32(i8 %a) {119; LA32R-LABEL: sext_i8_to_i32:120; LA32R:       # %bb.0:121; LA32R-NEXT:    slli.w $a0, $a0, 24122; LA32R-NEXT:    srai.w $a0, $a0, 24123; LA32R-NEXT:    ret124;125; LA32S-LABEL: sext_i8_to_i32:126; LA32S:       # %bb.0:127; LA32S-NEXT:    ext.w.b $a0, $a0128; LA32S-NEXT:    ret129;130; LA64-LABEL: sext_i8_to_i32:131; LA64:       # %bb.0:132; LA64-NEXT:    ext.w.b $a0, $a0133; LA64-NEXT:    ret134  %1 = sext i8 %a to i32135  ret i32 %1136}137 138define i64 @sext_i8_to_i64(i8 %a) {139; LA32R-LABEL: sext_i8_to_i64:140; LA32R:       # %bb.0:141; LA32R-NEXT:    slli.w $a1, $a0, 24142; LA32R-NEXT:    srai.w $a0, $a1, 24143; LA32R-NEXT:    srai.w $a1, $a1, 31144; LA32R-NEXT:    ret145;146; LA32S-LABEL: sext_i8_to_i64:147; LA32S:       # %bb.0:148; LA32S-NEXT:    ext.w.b $a0, $a0149; LA32S-NEXT:    srai.w $a1, $a0, 31150; LA32S-NEXT:    ret151;152; LA64-LABEL: sext_i8_to_i64:153; LA64:       # %bb.0:154; LA64-NEXT:    ext.w.b $a0, $a0155; LA64-NEXT:    ret156  %1 = sext i8 %a to i64157  ret i64 %1158}159 160define i32 @sext_i16_to_i32(i16 %a) {161; LA32R-LABEL: sext_i16_to_i32:162; LA32R:       # %bb.0:163; LA32R-NEXT:    slli.w $a0, $a0, 16164; LA32R-NEXT:    srai.w $a0, $a0, 16165; LA32R-NEXT:    ret166;167; LA32S-LABEL: sext_i16_to_i32:168; LA32S:       # %bb.0:169; LA32S-NEXT:    ext.w.h $a0, $a0170; LA32S-NEXT:    ret171;172; LA64-LABEL: sext_i16_to_i32:173; LA64:       # %bb.0:174; LA64-NEXT:    ext.w.h $a0, $a0175; LA64-NEXT:    ret176  %1 = sext i16 %a to i32177  ret i32 %1178}179 180define i64 @sext_i16_to_i64(i16 %a) {181; LA32R-LABEL: sext_i16_to_i64:182; LA32R:       # %bb.0:183; LA32R-NEXT:    slli.w $a1, $a0, 16184; LA32R-NEXT:    srai.w $a0, $a1, 16185; LA32R-NEXT:    srai.w $a1, $a1, 31186; LA32R-NEXT:    ret187;188; LA32S-LABEL: sext_i16_to_i64:189; LA32S:       # %bb.0:190; LA32S-NEXT:    ext.w.h $a0, $a0191; LA32S-NEXT:    srai.w $a1, $a0, 31192; LA32S-NEXT:    ret193;194; LA64-LABEL: sext_i16_to_i64:195; LA64:       # %bb.0:196; LA64-NEXT:    ext.w.h $a0, $a0197; LA64-NEXT:    ret198  %1 = sext i16 %a to i64199  ret i64 %1200}201 202define i64 @sext_i32_to_i64(i32 %a) {203; LA32R-LABEL: sext_i32_to_i64:204; LA32R:       # %bb.0:205; LA32R-NEXT:    srai.w $a1, $a0, 31206; LA32R-NEXT:    ret207;208; LA32S-LABEL: sext_i32_to_i64:209; LA32S:       # %bb.0:210; LA32S-NEXT:    srai.w $a1, $a0, 31211; LA32S-NEXT:    ret212;213; LA64-LABEL: sext_i32_to_i64:214; LA64:       # %bb.0:215; LA64-NEXT:    addi.w $a0, $a0, 0216; LA64-NEXT:    ret217  %1 = sext i32 %a to i64218  ret i64 %1219}220 221define i8 @zext_i1_to_i8(i1 %a) {222; LA32R-LABEL: zext_i1_to_i8:223; LA32R:       # %bb.0:224; LA32R-NEXT:    andi $a0, $a0, 1225; LA32R-NEXT:    ret226;227; LA32S-LABEL: zext_i1_to_i8:228; LA32S:       # %bb.0:229; LA32S-NEXT:    andi $a0, $a0, 1230; LA32S-NEXT:    ret231;232; LA64-LABEL: zext_i1_to_i8:233; LA64:       # %bb.0:234; LA64-NEXT:    andi $a0, $a0, 1235; LA64-NEXT:    ret236  %1 = zext i1 %a to i8237  ret i8 %1238}239 240define i16 @zext_i1_to_i16(i1 %a) {241; LA32R-LABEL: zext_i1_to_i16:242; LA32R:       # %bb.0:243; LA32R-NEXT:    andi $a0, $a0, 1244; LA32R-NEXT:    ret245;246; LA32S-LABEL: zext_i1_to_i16:247; LA32S:       # %bb.0:248; LA32S-NEXT:    andi $a0, $a0, 1249; LA32S-NEXT:    ret250;251; LA64-LABEL: zext_i1_to_i16:252; LA64:       # %bb.0:253; LA64-NEXT:    andi $a0, $a0, 1254; LA64-NEXT:    ret255  %1 = zext i1 %a to i16256  ret i16 %1257}258 259define i32 @zext_i1_to_i32(i1 %a) {260; LA32R-LABEL: zext_i1_to_i32:261; LA32R:       # %bb.0:262; LA32R-NEXT:    andi $a0, $a0, 1263; LA32R-NEXT:    ret264;265; LA32S-LABEL: zext_i1_to_i32:266; LA32S:       # %bb.0:267; LA32S-NEXT:    andi $a0, $a0, 1268; LA32S-NEXT:    ret269;270; LA64-LABEL: zext_i1_to_i32:271; LA64:       # %bb.0:272; LA64-NEXT:    andi $a0, $a0, 1273; LA64-NEXT:    ret274  %1 = zext i1 %a to i32275  ret i32 %1276}277 278define i64 @zext_i1_to_i64(i1 %a) {279; LA32R-LABEL: zext_i1_to_i64:280; LA32R:       # %bb.0:281; LA32R-NEXT:    andi $a0, $a0, 1282; LA32R-NEXT:    move $a1, $zero283; LA32R-NEXT:    ret284;285; LA32S-LABEL: zext_i1_to_i64:286; LA32S:       # %bb.0:287; LA32S-NEXT:    andi $a0, $a0, 1288; LA32S-NEXT:    move $a1, $zero289; LA32S-NEXT:    ret290;291; LA64-LABEL: zext_i1_to_i64:292; LA64:       # %bb.0:293; LA64-NEXT:    andi $a0, $a0, 1294; LA64-NEXT:    ret295  %1 = zext i1 %a to i64296  ret i64 %1297}298 299define i16 @zext_i8_to_i16(i8 %a) {300; LA32R-LABEL: zext_i8_to_i16:301; LA32R:       # %bb.0:302; LA32R-NEXT:    andi $a0, $a0, 255303; LA32R-NEXT:    ret304;305; LA32S-LABEL: zext_i8_to_i16:306; LA32S:       # %bb.0:307; LA32S-NEXT:    andi $a0, $a0, 255308; LA32S-NEXT:    ret309;310; LA64-LABEL: zext_i8_to_i16:311; LA64:       # %bb.0:312; LA64-NEXT:    andi $a0, $a0, 255313; LA64-NEXT:    ret314  %1 = zext i8 %a to i16315  ret i16 %1316}317 318define i32 @zext_i8_to_i32(i8 %a) {319; LA32R-LABEL: zext_i8_to_i32:320; LA32R:       # %bb.0:321; LA32R-NEXT:    andi $a0, $a0, 255322; LA32R-NEXT:    ret323;324; LA32S-LABEL: zext_i8_to_i32:325; LA32S:       # %bb.0:326; LA32S-NEXT:    andi $a0, $a0, 255327; LA32S-NEXT:    ret328;329; LA64-LABEL: zext_i8_to_i32:330; LA64:       # %bb.0:331; LA64-NEXT:    andi $a0, $a0, 255332; LA64-NEXT:    ret333  %1 = zext i8 %a to i32334  ret i32 %1335}336 337define i64 @zext_i8_to_i64(i8 %a) {338; LA32R-LABEL: zext_i8_to_i64:339; LA32R:       # %bb.0:340; LA32R-NEXT:    andi $a0, $a0, 255341; LA32R-NEXT:    move $a1, $zero342; LA32R-NEXT:    ret343;344; LA32S-LABEL: zext_i8_to_i64:345; LA32S:       # %bb.0:346; LA32S-NEXT:    andi $a0, $a0, 255347; LA32S-NEXT:    move $a1, $zero348; LA32S-NEXT:    ret349;350; LA64-LABEL: zext_i8_to_i64:351; LA64:       # %bb.0:352; LA64-NEXT:    andi $a0, $a0, 255353; LA64-NEXT:    ret354  %1 = zext i8 %a to i64355  ret i64 %1356}357 358define i32 @zext_i16_to_i32(i16 %a) {359; LA32R-LABEL: zext_i16_to_i32:360; LA32R:       # %bb.0:361; LA32R-NEXT:    lu12i.w $a1, 15362; LA32R-NEXT:    ori $a1, $a1, 4095363; LA32R-NEXT:    and $a0, $a0, $a1364; LA32R-NEXT:    ret365;366; LA32S-LABEL: zext_i16_to_i32:367; LA32S:       # %bb.0:368; LA32S-NEXT:    bstrpick.w $a0, $a0, 15, 0369; LA32S-NEXT:    ret370;371; LA64-LABEL: zext_i16_to_i32:372; LA64:       # %bb.0:373; LA64-NEXT:    bstrpick.d $a0, $a0, 15, 0374; LA64-NEXT:    ret375  %1 = zext i16 %a to i32376  ret i32 %1377}378 379define i64 @zext_i16_to_i64(i16 %a) {380; LA32R-LABEL: zext_i16_to_i64:381; LA32R:       # %bb.0:382; LA32R-NEXT:    lu12i.w $a1, 15383; LA32R-NEXT:    ori $a1, $a1, 4095384; LA32R-NEXT:    and $a0, $a0, $a1385; LA32R-NEXT:    move $a1, $zero386; LA32R-NEXT:    ret387;388; LA32S-LABEL: zext_i16_to_i64:389; LA32S:       # %bb.0:390; LA32S-NEXT:    bstrpick.w $a0, $a0, 15, 0391; LA32S-NEXT:    move $a1, $zero392; LA32S-NEXT:    ret393;394; LA64-LABEL: zext_i16_to_i64:395; LA64:       # %bb.0:396; LA64-NEXT:    bstrpick.d $a0, $a0, 15, 0397; LA64-NEXT:    ret398  %1 = zext i16 %a to i64399  ret i64 %1400}401 402define i64 @zext_i32_to_i64(i32 %a) {403; LA32R-LABEL: zext_i32_to_i64:404; LA32R:       # %bb.0:405; LA32R-NEXT:    move $a1, $zero406; LA32R-NEXT:    ret407;408; LA32S-LABEL: zext_i32_to_i64:409; LA32S:       # %bb.0:410; LA32S-NEXT:    move $a1, $zero411; LA32S-NEXT:    ret412;413; LA64-LABEL: zext_i32_to_i64:414; LA64:       # %bb.0:415; LA64-NEXT:    bstrpick.d $a0, $a0, 31, 0416; LA64-NEXT:    ret417  %1 = zext i32 %a to i64418  ret i64 %1419}420 421define i1 @trunc_i8_to_i1(i8 %a) {422; LA32R-LABEL: trunc_i8_to_i1:423; LA32R:       # %bb.0:424; LA32R-NEXT:    ret425;426; LA32S-LABEL: trunc_i8_to_i1:427; LA32S:       # %bb.0:428; LA32S-NEXT:    ret429;430; LA64-LABEL: trunc_i8_to_i1:431; LA64:       # %bb.0:432; LA64-NEXT:    ret433  %1 = trunc i8 %a to i1434  ret i1 %1435}436 437define i1 @trunc_i16_to_i1(i16 %a) {438; LA32R-LABEL: trunc_i16_to_i1:439; LA32R:       # %bb.0:440; LA32R-NEXT:    ret441;442; LA32S-LABEL: trunc_i16_to_i1:443; LA32S:       # %bb.0:444; LA32S-NEXT:    ret445;446; LA64-LABEL: trunc_i16_to_i1:447; LA64:       # %bb.0:448; LA64-NEXT:    ret449  %1 = trunc i16 %a to i1450  ret i1 %1451}452 453define i1 @trunc_i32_to_i1(i32 %a) {454; LA32R-LABEL: trunc_i32_to_i1:455; LA32R:       # %bb.0:456; LA32R-NEXT:    ret457;458; LA32S-LABEL: trunc_i32_to_i1:459; LA32S:       # %bb.0:460; LA32S-NEXT:    ret461;462; LA64-LABEL: trunc_i32_to_i1:463; LA64:       # %bb.0:464; LA64-NEXT:    ret465  %1 = trunc i32 %a to i1466  ret i1 %1467}468 469define i1 @trunc_i64_to_i1(i64 %a) {470; LA32R-LABEL: trunc_i64_to_i1:471; LA32R:       # %bb.0:472; LA32R-NEXT:    ret473;474; LA32S-LABEL: trunc_i64_to_i1:475; LA32S:       # %bb.0:476; LA32S-NEXT:    ret477;478; LA64-LABEL: trunc_i64_to_i1:479; LA64:       # %bb.0:480; LA64-NEXT:    ret481  %1 = trunc i64 %a to i1482  ret i1 %1483}484 485define i8 @trunc_i16_to_i8(i16 %a) {486; LA32R-LABEL: trunc_i16_to_i8:487; LA32R:       # %bb.0:488; LA32R-NEXT:    ret489;490; LA32S-LABEL: trunc_i16_to_i8:491; LA32S:       # %bb.0:492; LA32S-NEXT:    ret493;494; LA64-LABEL: trunc_i16_to_i8:495; LA64:       # %bb.0:496; LA64-NEXT:    ret497  %1 = trunc i16 %a to i8498  ret i8 %1499}500 501define i8 @trunc_i32_to_i8(i32 %a) {502; LA32R-LABEL: trunc_i32_to_i8:503; LA32R:       # %bb.0:504; LA32R-NEXT:    ret505;506; LA32S-LABEL: trunc_i32_to_i8:507; LA32S:       # %bb.0:508; LA32S-NEXT:    ret509;510; LA64-LABEL: trunc_i32_to_i8:511; LA64:       # %bb.0:512; LA64-NEXT:    ret513  %1 = trunc i32 %a to i8514  ret i8 %1515}516 517define i8 @trunc_i64_to_i8(i64 %a) {518; LA32R-LABEL: trunc_i64_to_i8:519; LA32R:       # %bb.0:520; LA32R-NEXT:    ret521;522; LA32S-LABEL: trunc_i64_to_i8:523; LA32S:       # %bb.0:524; LA32S-NEXT:    ret525;526; LA64-LABEL: trunc_i64_to_i8:527; LA64:       # %bb.0:528; LA64-NEXT:    ret529  %1 = trunc i64 %a to i8530  ret i8 %1531}532 533define i16 @trunc_i32_to_i16(i32 %a) {534; LA32R-LABEL: trunc_i32_to_i16:535; LA32R:       # %bb.0:536; LA32R-NEXT:    ret537;538; LA32S-LABEL: trunc_i32_to_i16:539; LA32S:       # %bb.0:540; LA32S-NEXT:    ret541;542; LA64-LABEL: trunc_i32_to_i16:543; LA64:       # %bb.0:544; LA64-NEXT:    ret545  %1 = trunc i32 %a to i16546  ret i16 %1547}548 549define i16 @trunc_i64_to_i16(i64 %a) {550; LA32R-LABEL: trunc_i64_to_i16:551; LA32R:       # %bb.0:552; LA32R-NEXT:    ret553;554; LA32S-LABEL: trunc_i64_to_i16:555; LA32S:       # %bb.0:556; LA32S-NEXT:    ret557;558; LA64-LABEL: trunc_i64_to_i16:559; LA64:       # %bb.0:560; LA64-NEXT:    ret561  %1 = trunc i64 %a to i16562  ret i16 %1563}564 565define i32 @trunc_i64_to_i32(i64 %a) {566; LA32R-LABEL: trunc_i64_to_i32:567; LA32R:       # %bb.0:568; LA32R-NEXT:    ret569;570; LA32S-LABEL: trunc_i64_to_i32:571; LA32S:       # %bb.0:572; LA32S-NEXT:    ret573;574; LA64-LABEL: trunc_i64_to_i32:575; LA64:       # %bb.0:576; LA64-NEXT:    ret577  %1 = trunc i64 %a to i32578  ret i32 %1579}580