brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.5 KiB · d5c6bbf Raw
503 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=armv6-none-eabi %s -o - | FileCheck %s --check-prefixes=CHECK-ARM,CHECK-ARMV63; RUN: llc -mtriple=armv7a-none-eabi %s -o - | FileCheck %s --check-prefixes=CHECK-ARM,CHECK-ARMV74; RUN: llc -mtriple=thumbv6m-none-eabi %s -o - | FileCheck %s --check-prefixes=CHECK-THUMB,CHECK-THUMBV6M5; RUN: llc -mtriple=thumbv7m-none-eabi %s -o - | FileCheck %s --check-prefixes=CHECK-THUMB,CHECK-THUMBV7M6 7define i32 @fold_add19_mul11_i32(i32 %a) {8; CHECK-ARM-LABEL: fold_add19_mul11_i32:9; CHECK-ARM:       @ %bb.0:10; CHECK-ARM-NEXT:    mov r1, #1111; CHECK-ARM-NEXT:    mul r0, r0, r112; CHECK-ARM-NEXT:    add r0, r0, #20913; CHECK-ARM-NEXT:    bx lr14;15; CHECK-THUMB-LABEL: fold_add19_mul11_i32:16; CHECK-THUMB:       @ %bb.0:17; CHECK-THUMB-NEXT:    movs r1, #1118; CHECK-THUMB-NEXT:    muls r0, r1, r019; CHECK-THUMB-NEXT:    adds r0, #20920; CHECK-THUMB-NEXT:    bx lr21  %b = add i32 %a, 1922  %c = mul i32 %b, 1123  ret i32 %c24}25 26define i16 @fold_add19_mul11_i16(i16 %a) {27; CHECK-ARM-LABEL: fold_add19_mul11_i16:28; CHECK-ARM:       @ %bb.0:29; CHECK-ARM-NEXT:    mov r1, #1130; CHECK-ARM-NEXT:    mul r0, r0, r131; CHECK-ARM-NEXT:    add r0, r0, #20932; CHECK-ARM-NEXT:    bx lr33;34; CHECK-THUMB-LABEL: fold_add19_mul11_i16:35; CHECK-THUMB:       @ %bb.0:36; CHECK-THUMB-NEXT:    movs r1, #1137; CHECK-THUMB-NEXT:    muls r0, r1, r038; CHECK-THUMB-NEXT:    adds r0, #20939; CHECK-THUMB-NEXT:    bx lr40  %b = add i16 %a, 1941  %c = mul i16 %b, 1142  ret i16 %c43}44 45define i32 @fold_sub19_mul11_i32(i32 %a) {46; CHECK-ARM-LABEL: fold_sub19_mul11_i32:47; CHECK-ARM:       @ %bb.0:48; CHECK-ARM-NEXT:    mov r1, #1149; CHECK-ARM-NEXT:    mul r0, r0, r150; CHECK-ARM-NEXT:    sub r0, r0, #20951; CHECK-ARM-NEXT:    bx lr52;53; CHECK-THUMB-LABEL: fold_sub19_mul11_i32:54; CHECK-THUMB:       @ %bb.0:55; CHECK-THUMB-NEXT:    movs r1, #1156; CHECK-THUMB-NEXT:    muls r0, r1, r057; CHECK-THUMB-NEXT:    subs r0, #20958; CHECK-THUMB-NEXT:    bx lr59  %b = add i32 %a, -1960  %c = mul i32 %b, 1161  ret i32 %c62}63 64define i16 @fold_sub19_mul11_i16(i16 %a) {65; CHECK-ARM-LABEL: fold_sub19_mul11_i16:66; CHECK-ARM:       @ %bb.0:67; CHECK-ARM-NEXT:    mov r1, #1168; CHECK-ARM-NEXT:    mul r0, r0, r169; CHECK-ARM-NEXT:    sub r0, r0, #20970; CHECK-ARM-NEXT:    bx lr71;72; CHECK-THUMB-LABEL: fold_sub19_mul11_i16:73; CHECK-THUMB:       @ %bb.0:74; CHECK-THUMB-NEXT:    movs r1, #1175; CHECK-THUMB-NEXT:    muls r0, r1, r076; CHECK-THUMB-NEXT:    subs r0, #20977; CHECK-THUMB-NEXT:    bx lr78  %b = add i16 %a, -1979  %c = mul i16 %b, 1180  ret i16 %c81}82 83define i32 @fold_add301_mul19_i32(i32 %a) {84; CHECK-ARMV6-LABEL: fold_add301_mul19_i32:85; CHECK-ARMV6:       @ %bb.0:86; CHECK-ARMV6-NEXT:    mov r1, #8787; CHECK-ARMV6-NEXT:    mov r2, #1988; CHECK-ARMV6-NEXT:    orr r1, r1, #563289; CHECK-ARMV6-NEXT:    mla r0, r0, r2, r190; CHECK-ARMV6-NEXT:    bx lr91;92; CHECK-ARMV7-LABEL: fold_add301_mul19_i32:93; CHECK-ARMV7:       @ %bb.0:94; CHECK-ARMV7-NEXT:    movw r1, #571995; CHECK-ARMV7-NEXT:    mov r2, #1996; CHECK-ARMV7-NEXT:    mla r0, r0, r2, r197; CHECK-ARMV7-NEXT:    bx lr98;99; CHECK-THUMBV6M-LABEL: fold_add301_mul19_i32:100; CHECK-THUMBV6M:       @ %bb.0:101; CHECK-THUMBV6M-NEXT:    movs r1, #19102; CHECK-THUMBV6M-NEXT:    muls r1, r0, r1103; CHECK-THUMBV6M-NEXT:    ldr r0, .LCPI4_0104; CHECK-THUMBV6M-NEXT:    adds r0, r1, r0105; CHECK-THUMBV6M-NEXT:    bx lr106; CHECK-THUMBV6M-NEXT:    .p2align 2107; CHECK-THUMBV6M-NEXT:  @ %bb.1:108; CHECK-THUMBV6M-NEXT:  .LCPI4_0:109; CHECK-THUMBV6M-NEXT:    .long 5719 @ 0x1657110;111; CHECK-THUMBV7M-LABEL: fold_add301_mul19_i32:112; CHECK-THUMBV7M:       @ %bb.0:113; CHECK-THUMBV7M-NEXT:    movw r1, #5719114; CHECK-THUMBV7M-NEXT:    movs r2, #19115; CHECK-THUMBV7M-NEXT:    mla r0, r0, r2, r1116; CHECK-THUMBV7M-NEXT:    bx lr117  %b = add i32 %a, 301118  %c = mul i32 %b, 19119  ret i32 %c120}121 122define i16 @fold_add301_mul19_i16(i16 %a) {123; CHECK-ARMV6-LABEL: fold_add301_mul19_i16:124; CHECK-ARMV6:       @ %bb.0:125; CHECK-ARMV6-NEXT:    mov r1, #87126; CHECK-ARMV6-NEXT:    mov r2, #19127; CHECK-ARMV6-NEXT:    orr r1, r1, #5632128; CHECK-ARMV6-NEXT:    mla r0, r0, r2, r1129; CHECK-ARMV6-NEXT:    bx lr130;131; CHECK-ARMV7-LABEL: fold_add301_mul19_i16:132; CHECK-ARMV7:       @ %bb.0:133; CHECK-ARMV7-NEXT:    movw r1, #5719134; CHECK-ARMV7-NEXT:    mov r2, #19135; CHECK-ARMV7-NEXT:    mla r0, r0, r2, r1136; CHECK-ARMV7-NEXT:    bx lr137;138; CHECK-THUMBV6M-LABEL: fold_add301_mul19_i16:139; CHECK-THUMBV6M:       @ %bb.0:140; CHECK-THUMBV6M-NEXT:    movs r1, #19141; CHECK-THUMBV6M-NEXT:    muls r1, r0, r1142; CHECK-THUMBV6M-NEXT:    ldr r0, .LCPI5_0143; CHECK-THUMBV6M-NEXT:    adds r0, r1, r0144; CHECK-THUMBV6M-NEXT:    bx lr145; CHECK-THUMBV6M-NEXT:    .p2align 2146; CHECK-THUMBV6M-NEXT:  @ %bb.1:147; CHECK-THUMBV6M-NEXT:  .LCPI5_0:148; CHECK-THUMBV6M-NEXT:    .long 5719 @ 0x1657149;150; CHECK-THUMBV7M-LABEL: fold_add301_mul19_i16:151; CHECK-THUMBV7M:       @ %bb.0:152; CHECK-THUMBV7M-NEXT:    movw r1, #5719153; CHECK-THUMBV7M-NEXT:    movs r2, #19154; CHECK-THUMBV7M-NEXT:    mla r0, r0, r2, r1155; CHECK-THUMBV7M-NEXT:    bx lr156  %b = add i16 %a, 301157  %c = mul i16 %b, 19158  ret i16 %c159}160 161define i32 @fold_sub301_mul19_i32(i32 %a) {162; CHECK-ARMV6-LABEL: fold_sub301_mul19_i32:163; CHECK-ARMV6:       @ %bb.0:164; CHECK-ARMV6-NEXT:    mvn r1, #86165; CHECK-ARMV6-NEXT:    mov r2, #19166; CHECK-ARMV6-NEXT:    sub r1, r1, #5632167; CHECK-ARMV6-NEXT:    mla r0, r0, r2, r1168; CHECK-ARMV6-NEXT:    bx lr169;170; CHECK-ARMV7-LABEL: fold_sub301_mul19_i32:171; CHECK-ARMV7:       @ %bb.0:172; CHECK-ARMV7-NEXT:    mov r1, #19173; CHECK-ARMV7-NEXT:    mul r0, r0, r1174; CHECK-ARMV7-NEXT:    movw r1, #5719175; CHECK-ARMV7-NEXT:    sub r0, r0, r1176; CHECK-ARMV7-NEXT:    bx lr177;178; CHECK-THUMBV6M-LABEL: fold_sub301_mul19_i32:179; CHECK-THUMBV6M:       @ %bb.0:180; CHECK-THUMBV6M-NEXT:    movs r1, #19181; CHECK-THUMBV6M-NEXT:    muls r1, r0, r1182; CHECK-THUMBV6M-NEXT:    ldr r0, .LCPI6_0183; CHECK-THUMBV6M-NEXT:    adds r0, r1, r0184; CHECK-THUMBV6M-NEXT:    bx lr185; CHECK-THUMBV6M-NEXT:    .p2align 2186; CHECK-THUMBV6M-NEXT:  @ %bb.1:187; CHECK-THUMBV6M-NEXT:  .LCPI6_0:188; CHECK-THUMBV6M-NEXT:    .long 4294961577 @ 0xffffe9a9189;190; CHECK-THUMBV7M-LABEL: fold_sub301_mul19_i32:191; CHECK-THUMBV7M:       @ %bb.0:192; CHECK-THUMBV7M-NEXT:    movs r1, #19193; CHECK-THUMBV7M-NEXT:    muls r0, r1, r0194; CHECK-THUMBV7M-NEXT:    movw r1, #5719195; CHECK-THUMBV7M-NEXT:    subs r0, r0, r1196; CHECK-THUMBV7M-NEXT:    bx lr197  %b = add i32 %a, -301198  %c = mul i32 %b, 19199  ret i32 %c200}201 202define i16 @fold_sub301_mul19_i16(i16 %a) {203; CHECK-ARMV6-LABEL: fold_sub301_mul19_i16:204; CHECK-ARMV6:       @ %bb.0:205; CHECK-ARMV6-NEXT:    mvn r1, #86206; CHECK-ARMV6-NEXT:    mov r2, #19207; CHECK-ARMV6-NEXT:    sub r1, r1, #5632208; CHECK-ARMV6-NEXT:    mla r0, r0, r2, r1209; CHECK-ARMV6-NEXT:    bx lr210;211; CHECK-ARMV7-LABEL: fold_sub301_mul19_i16:212; CHECK-ARMV7:       @ %bb.0:213; CHECK-ARMV7-NEXT:    mov r1, #19214; CHECK-ARMV7-NEXT:    mul r0, r0, r1215; CHECK-ARMV7-NEXT:    movw r1, #5719216; CHECK-ARMV7-NEXT:    sub r0, r0, r1217; CHECK-ARMV7-NEXT:    bx lr218;219; CHECK-THUMBV6M-LABEL: fold_sub301_mul19_i16:220; CHECK-THUMBV6M:       @ %bb.0:221; CHECK-THUMBV6M-NEXT:    movs r1, #19222; CHECK-THUMBV6M-NEXT:    muls r1, r0, r1223; CHECK-THUMBV6M-NEXT:    ldr r0, .LCPI7_0224; CHECK-THUMBV6M-NEXT:    adds r0, r1, r0225; CHECK-THUMBV6M-NEXT:    bx lr226; CHECK-THUMBV6M-NEXT:    .p2align 2227; CHECK-THUMBV6M-NEXT:  @ %bb.1:228; CHECK-THUMBV6M-NEXT:  .LCPI7_0:229; CHECK-THUMBV6M-NEXT:    .long 4294961577 @ 0xffffe9a9230;231; CHECK-THUMBV7M-LABEL: fold_sub301_mul19_i16:232; CHECK-THUMBV7M:       @ %bb.0:233; CHECK-THUMBV7M-NEXT:    movs r1, #19234; CHECK-THUMBV7M-NEXT:    muls r0, r1, r0235; CHECK-THUMBV7M-NEXT:    movw r1, #5719236; CHECK-THUMBV7M-NEXT:    subs r0, r0, r1237; CHECK-THUMBV7M-NEXT:    bx lr238  %b = add i16 %a, -301239  %c = mul i16 %b, 19240  ret i16 %c241}242 243define i32 @fold_add251_mul253_i32(i32 %a) {244; CHECK-ARMV6-LABEL: fold_add251_mul253_i32:245; CHECK-ARMV6:       @ %bb.0:246; CHECK-ARMV6-NEXT:    add r0, r0, #251247; CHECK-ARMV6-NEXT:    mov r1, #253248; CHECK-ARMV6-NEXT:    mul r0, r0, r1249; CHECK-ARMV6-NEXT:    bx lr250;251; CHECK-ARMV7-LABEL: fold_add251_mul253_i32:252; CHECK-ARMV7:       @ %bb.0:253; CHECK-ARMV7-NEXT:    movw r1, #63503254; CHECK-ARMV7-NEXT:    mov r2, #253255; CHECK-ARMV7-NEXT:    mla r0, r0, r2, r1256; CHECK-ARMV7-NEXT:    bx lr257;258; CHECK-THUMBV6M-LABEL: fold_add251_mul253_i32:259; CHECK-THUMBV6M:       @ %bb.0:260; CHECK-THUMBV6M-NEXT:    adds r0, #251261; CHECK-THUMBV6M-NEXT:    movs r1, #253262; CHECK-THUMBV6M-NEXT:    muls r0, r1, r0263; CHECK-THUMBV6M-NEXT:    bx lr264;265; CHECK-THUMBV7M-LABEL: fold_add251_mul253_i32:266; CHECK-THUMBV7M:       @ %bb.0:267; CHECK-THUMBV7M-NEXT:    movw r1, #63503268; CHECK-THUMBV7M-NEXT:    movs r2, #253269; CHECK-THUMBV7M-NEXT:    mla r0, r0, r2, r1270; CHECK-THUMBV7M-NEXT:    bx lr271  %b = add i32 %a, 251272  %c = mul i32 %b, 253273  ret i32 %c274}275 276define i16 @fold_add251_mul253_i16(i16 %a) {277; CHECK-ARMV6-LABEL: fold_add251_mul253_i16:278; CHECK-ARMV6:       @ %bb.0:279; CHECK-ARMV6-NEXT:    add r0, r0, #251280; CHECK-ARMV6-NEXT:    mov r1, #253281; CHECK-ARMV6-NEXT:    mul r0, r0, r1282; CHECK-ARMV6-NEXT:    bx lr283;284; CHECK-ARMV7-LABEL: fold_add251_mul253_i16:285; CHECK-ARMV7:       @ %bb.0:286; CHECK-ARMV7-NEXT:    mov r1, #253287; CHECK-ARMV7-NEXT:    mul r0, r0, r1288; CHECK-ARMV7-NEXT:    movw r1, #2033289; CHECK-ARMV7-NEXT:    sub r0, r0, r1290; CHECK-ARMV7-NEXT:    bx lr291;292; CHECK-THUMBV6M-LABEL: fold_add251_mul253_i16:293; CHECK-THUMBV6M:       @ %bb.0:294; CHECK-THUMBV6M-NEXT:    adds r0, #251295; CHECK-THUMBV6M-NEXT:    movs r1, #253296; CHECK-THUMBV6M-NEXT:    muls r0, r1, r0297; CHECK-THUMBV6M-NEXT:    bx lr298;299; CHECK-THUMBV7M-LABEL: fold_add251_mul253_i16:300; CHECK-THUMBV7M:       @ %bb.0:301; CHECK-THUMBV7M-NEXT:    movs r1, #253302; CHECK-THUMBV7M-NEXT:    muls r0, r1, r0303; CHECK-THUMBV7M-NEXT:    subw r0, r0, #2033304; CHECK-THUMBV7M-NEXT:    bx lr305  %b = add i16 %a, 251306  %c = mul i16 %b, 253307  ret i16 %c308}309 310define i32 @fold_sub251_mul253_i32(i32 %a) {311; CHECK-ARM-LABEL: fold_sub251_mul253_i32:312; CHECK-ARM:       @ %bb.0:313; CHECK-ARM-NEXT:    sub r0, r0, #251314; CHECK-ARM-NEXT:    mov r1, #253315; CHECK-ARM-NEXT:    mul r0, r0, r1316; CHECK-ARM-NEXT:    bx lr317;318; CHECK-THUMB-LABEL: fold_sub251_mul253_i32:319; CHECK-THUMB:       @ %bb.0:320; CHECK-THUMB-NEXT:    subs r0, #251321; CHECK-THUMB-NEXT:    movs r1, #253322; CHECK-THUMB-NEXT:    muls r0, r1, r0323; CHECK-THUMB-NEXT:    bx lr324  %b = add i32 %a, -251325  %c = mul i32 %b, 253326  ret i32 %c327}328 329define i16 @fold_sub251_mul253_i16(i16 %a) {330; CHECK-ARMV6-LABEL: fold_sub251_mul253_i16:331; CHECK-ARMV6:       @ %bb.0:332; CHECK-ARMV6-NEXT:    sub r0, r0, #251333; CHECK-ARMV6-NEXT:    mov r1, #253334; CHECK-ARMV6-NEXT:    mul r0, r0, r1335; CHECK-ARMV6-NEXT:    bx lr336;337; CHECK-ARMV7-LABEL: fold_sub251_mul253_i16:338; CHECK-ARMV7:       @ %bb.0:339; CHECK-ARMV7-NEXT:    movw r1, #2033340; CHECK-ARMV7-NEXT:    mov r2, #253341; CHECK-ARMV7-NEXT:    mla r0, r0, r2, r1342; CHECK-ARMV7-NEXT:    bx lr343;344; CHECK-THUMBV6M-LABEL: fold_sub251_mul253_i16:345; CHECK-THUMBV6M:       @ %bb.0:346; CHECK-THUMBV6M-NEXT:    subs r0, #251347; CHECK-THUMBV6M-NEXT:    movs r1, #253348; CHECK-THUMBV6M-NEXT:    muls r0, r1, r0349; CHECK-THUMBV6M-NEXT:    bx lr350;351; CHECK-THUMBV7M-LABEL: fold_sub251_mul253_i16:352; CHECK-THUMBV7M:       @ %bb.0:353; CHECK-THUMBV7M-NEXT:    movs r1, #253354; CHECK-THUMBV7M-NEXT:    muls r0, r1, r0355; CHECK-THUMBV7M-NEXT:    addw r0, r0, #2033356; CHECK-THUMBV7M-NEXT:    bx lr357  %b = add i16 %a, -251358  %c = mul i16 %b, 253359  ret i16 %c360}361 362define i32 @fold_add251_mul353_i32(i32 %a) {363; CHECK-ARMV6-LABEL: fold_add251_mul353_i32:364; CHECK-ARMV6:       @ %bb.0:365; CHECK-ARMV6-NEXT:    mov r1, #97366; CHECK-ARMV6-NEXT:    add r0, r0, #251367; CHECK-ARMV6-NEXT:    orr r1, r1, #256368; CHECK-ARMV6-NEXT:    mul r0, r0, r1369; CHECK-ARMV6-NEXT:    bx lr370;371; CHECK-ARMV7-LABEL: fold_add251_mul353_i32:372; CHECK-ARMV7:       @ %bb.0:373; CHECK-ARMV7-NEXT:    add r0, r0, #251374; CHECK-ARMV7-NEXT:    movw r1, #353375; CHECK-ARMV7-NEXT:    mul r0, r0, r1376; CHECK-ARMV7-NEXT:    bx lr377;378; CHECK-THUMBV6M-LABEL: fold_add251_mul353_i32:379; CHECK-THUMBV6M:       @ %bb.0:380; CHECK-THUMBV6M-NEXT:    movs r1, #255381; CHECK-THUMBV6M-NEXT:    adds r1, #98382; CHECK-THUMBV6M-NEXT:    adds r0, #251383; CHECK-THUMBV6M-NEXT:    muls r0, r1, r0384; CHECK-THUMBV6M-NEXT:    bx lr385;386; CHECK-THUMBV7M-LABEL: fold_add251_mul353_i32:387; CHECK-THUMBV7M:       @ %bb.0:388; CHECK-THUMBV7M-NEXT:    adds r0, #251389; CHECK-THUMBV7M-NEXT:    movw r1, #353390; CHECK-THUMBV7M-NEXT:    muls r0, r1, r0391; CHECK-THUMBV7M-NEXT:    bx lr392  %b = add i32 %a, 251393  %c = mul i32 %b, 353394  ret i32 %c395}396 397define i16 @fold_add251_mul353_i16(i16 %a) {398; CHECK-ARMV6-LABEL: fold_add251_mul353_i16:399; CHECK-ARMV6:       @ %bb.0:400; CHECK-ARMV6-NEXT:    mov r1, #97401; CHECK-ARMV6-NEXT:    add r0, r0, #251402; CHECK-ARMV6-NEXT:    orr r1, r1, #256403; CHECK-ARMV6-NEXT:    mul r0, r0, r1404; CHECK-ARMV6-NEXT:    bx lr405;406; CHECK-ARMV7-LABEL: fold_add251_mul353_i16:407; CHECK-ARMV7:       @ %bb.0:408; CHECK-ARMV7-NEXT:    movw r1, #23067409; CHECK-ARMV7-NEXT:    movw r2, #353410; CHECK-ARMV7-NEXT:    mla r0, r0, r2, r1411; CHECK-ARMV7-NEXT:    bx lr412;413; CHECK-THUMBV6M-LABEL: fold_add251_mul353_i16:414; CHECK-THUMBV6M:       @ %bb.0:415; CHECK-THUMBV6M-NEXT:    movs r1, #255416; CHECK-THUMBV6M-NEXT:    adds r1, #98417; CHECK-THUMBV6M-NEXT:    adds r0, #251418; CHECK-THUMBV6M-NEXT:    muls r0, r1, r0419; CHECK-THUMBV6M-NEXT:    bx lr420;421; CHECK-THUMBV7M-LABEL: fold_add251_mul353_i16:422; CHECK-THUMBV7M:       @ %bb.0:423; CHECK-THUMBV7M-NEXT:    movw r1, #23067424; CHECK-THUMBV7M-NEXT:    movw r2, #353425; CHECK-THUMBV7M-NEXT:    mla r0, r0, r2, r1426; CHECK-THUMBV7M-NEXT:    bx lr427  %b = add i16 %a, 251428  %c = mul i16 %b, 353429  ret i16 %c430}431 432define i32 @fold_sub251_mul353_i32(i32 %a) {433; CHECK-ARMV6-LABEL: fold_sub251_mul353_i32:434; CHECK-ARMV6:       @ %bb.0:435; CHECK-ARMV6-NEXT:    mov r1, #97436; CHECK-ARMV6-NEXT:    sub r0, r0, #251437; CHECK-ARMV6-NEXT:    orr r1, r1, #256438; CHECK-ARMV6-NEXT:    mul r0, r0, r1439; CHECK-ARMV6-NEXT:    bx lr440;441; CHECK-ARMV7-LABEL: fold_sub251_mul353_i32:442; CHECK-ARMV7:       @ %bb.0:443; CHECK-ARMV7-NEXT:    sub r0, r0, #251444; CHECK-ARMV7-NEXT:    movw r1, #353445; CHECK-ARMV7-NEXT:    mul r0, r0, r1446; CHECK-ARMV7-NEXT:    bx lr447;448; CHECK-THUMBV6M-LABEL: fold_sub251_mul353_i32:449; CHECK-THUMBV6M:       @ %bb.0:450; CHECK-THUMBV6M-NEXT:    movs r1, #255451; CHECK-THUMBV6M-NEXT:    adds r1, #98452; CHECK-THUMBV6M-NEXT:    subs r0, #251453; CHECK-THUMBV6M-NEXT:    muls r0, r1, r0454; CHECK-THUMBV6M-NEXT:    bx lr455;456; CHECK-THUMBV7M-LABEL: fold_sub251_mul353_i32:457; CHECK-THUMBV7M:       @ %bb.0:458; CHECK-THUMBV7M-NEXT:    subs r0, #251459; CHECK-THUMBV7M-NEXT:    movw r1, #353460; CHECK-THUMBV7M-NEXT:    muls r0, r1, r0461; CHECK-THUMBV7M-NEXT:    bx lr462  %b = add i32 %a, -251463  %c = mul i32 %b, 353464  ret i32 %c465}466 467define i16 @fold_sub251_mul353_i16(i16 %a) {468; CHECK-ARMV6-LABEL: fold_sub251_mul353_i16:469; CHECK-ARMV6:       @ %bb.0:470; CHECK-ARMV6-NEXT:    mov r1, #97471; CHECK-ARMV6-NEXT:    sub r0, r0, #251472; CHECK-ARMV6-NEXT:    orr r1, r1, #256473; CHECK-ARMV6-NEXT:    mul r0, r0, r1474; CHECK-ARMV6-NEXT:    bx lr475;476; CHECK-ARMV7-LABEL: fold_sub251_mul353_i16:477; CHECK-ARMV7:       @ %bb.0:478; CHECK-ARMV7-NEXT:    movw r1, #353479; CHECK-ARMV7-NEXT:    mul r0, r0, r1480; CHECK-ARMV7-NEXT:    movw r1, #23067481; CHECK-ARMV7-NEXT:    sub r0, r0, r1482; CHECK-ARMV7-NEXT:    bx lr483;484; CHECK-THUMBV6M-LABEL: fold_sub251_mul353_i16:485; CHECK-THUMBV6M:       @ %bb.0:486; CHECK-THUMBV6M-NEXT:    movs r1, #255487; CHECK-THUMBV6M-NEXT:    adds r1, #98488; CHECK-THUMBV6M-NEXT:    subs r0, #251489; CHECK-THUMBV6M-NEXT:    muls r0, r1, r0490; CHECK-THUMBV6M-NEXT:    bx lr491;492; CHECK-THUMBV7M-LABEL: fold_sub251_mul353_i16:493; CHECK-THUMBV7M:       @ %bb.0:494; CHECK-THUMBV7M-NEXT:    movw r1, #353495; CHECK-THUMBV7M-NEXT:    muls r0, r1, r0496; CHECK-THUMBV7M-NEXT:    movw r1, #23067497; CHECK-THUMBV7M-NEXT:    subs r0, r0, r1498; CHECK-THUMBV7M-NEXT:    bx lr499  %b = add i16 %a, -251500  %c = mul i16 %b, 353501  ret i16 %c502}503