314 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -mcpu=pwr9 -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s --check-prefix=CHECK-P93; RUN: llc -verify-machineinstrs -mcpu=pwr8 -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s --check-prefix=CHECK-P84; RUN: llc -verify-machineinstrs -mcpu=pwr8 -mtriple=powerpc64-ibm-aix-xcoff -vec-extabi < %s | FileCheck %s --check-prefix=CHECK-P85 6define signext i64 @maddld64(i64 signext %a, i64 signext %b) {7; CHECK-P9-LABEL: maddld64:8; CHECK-P9: # %bb.0: # %entry9; CHECK-P9-NEXT: maddld 3, 4, 3, 310; CHECK-P9-NEXT: blr11;12; CHECK-P8-LABEL: maddld64:13; CHECK-P8: # %bb.0: # %entry14; CHECK-P8-NEXT: mulld 4, 4, 315; CHECK-P8-NEXT: add 3, 4, 316; CHECK-P8-NEXT: blr17 18entry:19 %mul = mul i64 %b, %a20 %add = add i64 %mul, %a21 ret i64 %add22}23 24define signext i32 @maddld32(i32 signext %a, i32 signext %b) {25; CHECK-P9-LABEL: maddld32:26; CHECK-P9: # %bb.0: # %entry27; CHECK-P9-NEXT: maddld 3, 4, 3, 328; CHECK-P9-NEXT: extsw 3, 329; CHECK-P9-NEXT: blr30;31; CHECK-P8-LABEL: maddld32:32; CHECK-P8: # %bb.0: # %entry33; CHECK-P8-NEXT: mullw 4, 4, 334; CHECK-P8-NEXT: add 3, 4, 335; CHECK-P8-NEXT: extsw 3, 336; CHECK-P8-NEXT: blr37 38entry:39 %mul = mul i32 %b, %a40 %add = add i32 %mul, %a41 ret i32 %add42}43 44define signext i16 @maddld16(i16 signext %a, i16 signext %b, i16 signext %c) {45; CHECK-P9-LABEL: maddld16:46; CHECK-P9: # %bb.0: # %entry47; CHECK-P9-NEXT: maddld 3, 4, 3, 548; CHECK-P9-NEXT: extsh 3, 349; CHECK-P9-NEXT: blr50;51; CHECK-P8-LABEL: maddld16:52; CHECK-P8: # %bb.0: # %entry53; CHECK-P8-NEXT: mullw 3, 4, 354; CHECK-P8-NEXT: add 3, 3, 555; CHECK-P8-NEXT: extsh 3, 356; CHECK-P8-NEXT: blr57 58entry:59 %mul = mul i16 %b, %a60 %add = add i16 %mul, %c61 ret i16 %add62}63 64define zeroext i32 @maddld32zeroext(i32 zeroext %a, i32 zeroext %b) {65; CHECK-P9-LABEL: maddld32zeroext:66; CHECK-P9: # %bb.0: # %entry67; CHECK-P9-NEXT: maddld 3, 4, 3, 368; CHECK-P9-NEXT: clrldi 3, 3, 3269; CHECK-P9-NEXT: blr70;71; CHECK-P8-LABEL: maddld32zeroext:72; CHECK-P8: # %bb.0: # %entry73; CHECK-P8-NEXT: mullw 4, 4, 374; CHECK-P8-NEXT: add 3, 4, 375; CHECK-P8-NEXT: clrldi 3, 3, 3276; CHECK-P8-NEXT: blr77 78entry:79 %mul = mul i32 %b, %a80 %add = add i32 %mul, %a81 ret i32 %add82}83 84define signext i32 @maddld32nsw(i32 signext %a, i32 signext %b) {85; CHECK-P9-LABEL: maddld32nsw:86; CHECK-P9: # %bb.0: # %entry87; CHECK-P9-NEXT: maddld 3, 4, 3, 388; CHECK-P9-NEXT: extsw 3, 389; CHECK-P9-NEXT: blr90;91; CHECK-P8-LABEL: maddld32nsw:92; CHECK-P8: # %bb.0: # %entry93; CHECK-P8-NEXT: mullw 4, 4, 394; CHECK-P8-NEXT: add 3, 4, 395; CHECK-P8-NEXT: extsw 3, 396; CHECK-P8-NEXT: blr97 98entry:99 %mul = mul nsw i32 %b, %a100 %add = add nsw i32 %mul, %a101 ret i32 %add102}103 104define zeroext i32 @maddld32nuw(i32 zeroext %a, i32 zeroext %b) {105; CHECK-P9-LABEL: maddld32nuw:106; CHECK-P9: # %bb.0: # %entry107; CHECK-P9-NEXT: maddld 3, 4, 3, 3108; CHECK-P9-NEXT: clrldi 3, 3, 32109; CHECK-P9-NEXT: blr110;111; CHECK-P8-LABEL: maddld32nuw:112; CHECK-P8: # %bb.0: # %entry113; CHECK-P8-NEXT: mullw 4, 4, 3114; CHECK-P8-NEXT: add 3, 4, 3115; CHECK-P8-NEXT: clrldi 3, 3, 32116; CHECK-P8-NEXT: blr117 118entry:119 %mul = mul nuw i32 %b, %a120 %add = add nuw i32 %mul, %a121 ret i32 %add122}123 124define signext i64 @maddld64_imm(i64 signext %a, i64 signext %b) {125; CHECK-P9-LABEL: maddld64_imm:126; CHECK-P9: # %bb.0: # %entry127; CHECK-P9-NEXT: mulli 4, 4, 13128; CHECK-P9-NEXT: add 3, 4, 3129; CHECK-P9-NEXT: blr130;131; CHECK-P8-LABEL: maddld64_imm:132; CHECK-P8: # %bb.0: # %entry133; CHECK-P8-NEXT: mulli 4, 4, 13134; CHECK-P8-NEXT: add 3, 4, 3135; CHECK-P8-NEXT: blr136entry:137 %mul = mul i64 %b, 13138 %add = add i64 %mul, %a139 ret i64 %add140}141 142define signext i32 @maddld32_imm(i32 signext %a, i32 signext %b) {143; CHECK-P9-LABEL: maddld32_imm:144; CHECK-P9: # %bb.0: # %entry145; CHECK-P9-NEXT: mullw 3, 4, 3146; CHECK-P9-NEXT: addi 3, 3, 13147; CHECK-P9-NEXT: extsw 3, 3148; CHECK-P9-NEXT: blr149;150; CHECK-P8-LABEL: maddld32_imm:151; CHECK-P8: # %bb.0: # %entry152; CHECK-P8-NEXT: mullw 3, 4, 3153; CHECK-P8-NEXT: addi 3, 3, 13154; CHECK-P8-NEXT: extsw 3, 3155; CHECK-P8-NEXT: blr156entry:157 %mul = mul i32 %b, %a158 %add = add i32 %mul, 13159 ret i32 %add160}161 162define signext i16 @maddld16_imm(i16 signext %a, i16 signext %b, i16 signext %c) {163; CHECK-P9-LABEL: maddld16_imm:164; CHECK-P9: # %bb.0: # %entry165; CHECK-P9-NEXT: mulli 3, 4, 13166; CHECK-P9-NEXT: add 3, 3, 5167; CHECK-P9-NEXT: extsh 3, 3168; CHECK-P9-NEXT: blr169;170; CHECK-P8-LABEL: maddld16_imm:171; CHECK-P8: # %bb.0: # %entry172; CHECK-P8-NEXT: mulli 3, 4, 13173; CHECK-P8-NEXT: add 3, 3, 5174; CHECK-P8-NEXT: extsh 3, 3175; CHECK-P8-NEXT: blr176entry:177 %mul = mul i16 %b, 13178 %add = add i16 %mul, %c179 ret i16 %add180}181 182define zeroext i32 @maddld32zeroext_imm(i32 zeroext %a, i32 zeroext %b) {183; CHECK-P9-LABEL: maddld32zeroext_imm:184; CHECK-P9: # %bb.0: # %entry185; CHECK-P9-NEXT: mullw 3, 4, 3186; CHECK-P9-NEXT: addi 3, 3, 13187; CHECK-P9-NEXT: clrldi 3, 3, 32188; CHECK-P9-NEXT: blr189;190; CHECK-P8-LABEL: maddld32zeroext_imm:191; CHECK-P8: # %bb.0: # %entry192; CHECK-P8-NEXT: mullw 3, 4, 3193; CHECK-P8-NEXT: addi 3, 3, 13194; CHECK-P8-NEXT: clrldi 3, 3, 32195; CHECK-P8-NEXT: blr196entry:197 %mul = mul i32 %b, %a198 %add = add i32 %mul, 13199 ret i32 %add200}201 202define signext i32 @maddld32nsw_imm(i32 signext %a, i32 signext %b) {203; CHECK-P9-LABEL: maddld32nsw_imm:204; CHECK-P9: # %bb.0: # %entry205; CHECK-P9-NEXT: mulli 4, 4, 13206; CHECK-P9-NEXT: add 3, 4, 3207; CHECK-P9-NEXT: extsw 3, 3208; CHECK-P9-NEXT: blr209;210; CHECK-P8-LABEL: maddld32nsw_imm:211; CHECK-P8: # %bb.0: # %entry212; CHECK-P8-NEXT: mulli 4, 4, 13213; CHECK-P8-NEXT: add 3, 4, 3214; CHECK-P8-NEXT: extsw 3, 3215; CHECK-P8-NEXT: blr216entry:217 %mul = mul nsw i32 %b, 13218 %add = add nsw i32 %mul, %a219 ret i32 %add220}221 222define zeroext i32 @maddld32nuw_imm(i32 zeroext %a, i32 zeroext %b) {223; CHECK-P9-LABEL: maddld32nuw_imm:224; CHECK-P9: # %bb.0: # %entry225; CHECK-P9-NEXT: mullw 3, 4, 3226; CHECK-P9-NEXT: addi 3, 3, 13227; CHECK-P9-NEXT: clrldi 3, 3, 32228; CHECK-P9-NEXT: blr229;230; CHECK-P8-LABEL: maddld32nuw_imm:231; CHECK-P8: # %bb.0: # %entry232; CHECK-P8-NEXT: mullw 3, 4, 3233; CHECK-P8-NEXT: addi 3, 3, 13234; CHECK-P8-NEXT: clrldi 3, 3, 32235; CHECK-P8-NEXT: blr236entry:237 %mul = mul nuw i32 %b, %a238 %add = add nuw i32 %mul, 13239 ret i32 %add240}241 242define zeroext i32 @maddld32nuw_imm_imm(i32 zeroext %b) {243; CHECK-P9-LABEL: maddld32nuw_imm_imm:244; CHECK-P9: # %bb.0: # %entry245; CHECK-P9-NEXT: mulli 3, 3, 18246; CHECK-P9-NEXT: addi 3, 3, 13247; CHECK-P9-NEXT: clrldi 3, 3, 32248; CHECK-P9-NEXT: blr249;250; CHECK-P8-LABEL: maddld32nuw_imm_imm:251; CHECK-P8: # %bb.0: # %entry252; CHECK-P8-NEXT: mulli 3, 3, 18253; CHECK-P8-NEXT: addi 3, 3, 13254; CHECK-P8-NEXT: clrldi 3, 3, 32255; CHECK-P8-NEXT: blr256entry:257 %mul = mul nuw i32 %b, 18258 %add = add nuw i32 %mul, 13259 ret i32 %add260}261 262define zeroext i32 @maddld32nuw_bigimm_imm(i32 zeroext %b) {263; CHECK-P9-LABEL: maddld32nuw_bigimm_imm:264; CHECK-P9: # %bb.0: # %entry265; CHECK-P9-NEXT: lis 4, 26127266; CHECK-P9-NEXT: ori 4, 4, 63251267; CHECK-P9-NEXT: mullw 3, 3, 4268; CHECK-P9-NEXT: addi 3, 3, 13269; CHECK-P9-NEXT: clrldi 3, 3, 32270; CHECK-P9-NEXT: blr271;272; CHECK-P8-LABEL: maddld32nuw_bigimm_imm:273; CHECK-P8: # %bb.0: # %entry274; CHECK-P8-NEXT: lis 4, 26127275; CHECK-P8-NEXT: ori 4, 4, 63251276; CHECK-P8-NEXT: mullw 3, 3, 4277; CHECK-P8-NEXT: addi 3, 3, 13278; CHECK-P8-NEXT: clrldi 3, 3, 32279; CHECK-P8-NEXT: blr280entry:281 %mul = mul nuw i32 %b, 1712322323282 %add = add nuw i32 %mul, 13283 ret i32 %add284}285 286define zeroext i32 @maddld32nuw_bigimm_bigimm(i32 zeroext %b) {287; CHECK-P9-LABEL: maddld32nuw_bigimm_bigimm:288; CHECK-P9: # %bb.0: # %entry289; CHECK-P9-NEXT: lis 4, -865290; CHECK-P9-NEXT: lis 5, 26127291; CHECK-P9-NEXT: ori 4, 4, 42779292; CHECK-P9-NEXT: ori 5, 5, 63251293; CHECK-P9-NEXT: maddld 3, 3, 5, 4294; CHECK-P9-NEXT: clrldi 3, 3, 32295; CHECK-P9-NEXT: blr296;297; CHECK-P8-LABEL: maddld32nuw_bigimm_bigimm:298; CHECK-P8: # %bb.0: # %entry299; CHECK-P8-NEXT: lis 4, 26127300; CHECK-P8-NEXT: ori 4, 4, 63251301; CHECK-P8-NEXT: mullw 3, 3, 4302; CHECK-P8-NEXT: addi 3, 3, -22757303; CHECK-P8-NEXT: addis 3, 3, -864304; CHECK-P8-NEXT: clrldi 3, 3, 32305; CHECK-P8-NEXT: blr306 307 308 309entry:310 %mul = mul nuw i32 %b, 1712322323311 %add = add nuw i32 %mul, 17123223323312 ret i32 %add313}314