1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=aarch64 -mcpu=apple-m1 -mattr=+store-pair-suppress -o - %s | FileCheck --check-prefix=SUPPRESS %s 3; RUN: llc -mtriple=aarch64 -mcpu=apple-m1 -mattr=-store-pair-suppress -o - %s | FileCheck --check-prefix=NOSUPPRESS %s 4 5define void @vector_units_critial(ptr %dst, <8 x i32> %v0) { 6; SUPPRESS-LABEL: vector_units_critial: 7; SUPPRESS: // %bb.0: // %entry 8; SUPPRESS-NEXT: uzp1 v0.8h, v0.8h, v1.8h 9; SUPPRESS-NEXT: xtn v0.8b, v0.8h 10; SUPPRESS-NEXT: mul v1.8b, v0.8b, v0.8b 11; SUPPRESS-NEXT: str d1, [x0, #8] 12; SUPPRESS-NEXT: str d0, [x0] 13; SUPPRESS-NEXT: ret 14; 15; NOSUPPRESS-LABEL: vector_units_critial: 16; NOSUPPRESS: // %bb.0: // %entry 17; NOSUPPRESS-NEXT: uzp1 v0.8h, v0.8h, v1.8h 18; NOSUPPRESS-NEXT: xtn v0.8b, v0.8h 19; NOSUPPRESS-NEXT: mul v1.8b, v0.8b, v0.8b 20; NOSUPPRESS-NEXT: stp d0, d1, [x0] 21; NOSUPPRESS-NEXT: ret 22entry: 23 %add.ptr.1 = getelementptr i8, ptr %dst, i64 8 24 %t = trunc <8 x i32> %v0 to <8 x i8> 25 %mul = mul <8 x i8> %t, %t 26 store <8 x i8> %mul, ptr %add.ptr.1, align 1 27 store <8 x i8> %t, ptr %dst, align 1 28 ret void 29} 30 31%struct.widget = type { float, float } 32 33define void @load_store_units_critical(ptr %arg, ptr noundef %arg1, i64 noundef %arg2, i64 noundef %arg3) { 34; SUPPRESS-LABEL: load_store_units_critical: 35; SUPPRESS: // %bb.0: // %bb 36; SUPPRESS-NEXT: ldr x8, [x0, #8] 37; SUPPRESS-NEXT: ldp s0, s1, [x8] 38; SUPPRESS-NEXT: add x8, x1, x2, lsl #3 39; SUPPRESS-NEXT: ldp s2, s3, [x8] 40; SUPPRESS-NEXT: ldp s4, s5, [x8, #8] 41; SUPPRESS-NEXT: fmul s6, s5, s1 42; SUPPRESS-NEXT: fmul s1, s4, s1 43; SUPPRESS-NEXT: fnmsub s4, s4, s0, s6 44; SUPPRESS-NEXT: fmadd s0, s5, s0, s1 45; SUPPRESS-NEXT: fadd s1, s4, s2 46; SUPPRESS-NEXT: fadd s5, s0, s3 47; SUPPRESS-NEXT: stp s1, s5, [x8] 48; SUPPRESS-NEXT: fsub s2, s2, s4 49; SUPPRESS-NEXT: fsub s0, s3, s0 50; SUPPRESS-NEXT: stp s2, s0, [x8, #8] 51; SUPPRESS-NEXT: ldr x9, [x0, #8] 52; SUPPRESS-NEXT: ldp s3, s4, [x9] 53; SUPPRESS-NEXT: ldp s6, s7, [x8, #16] 54; SUPPRESS-NEXT: ldp s16, s17, [x8, #24] 55; SUPPRESS-NEXT: fmul s18, s17, s4 56; SUPPRESS-NEXT: fmul s4, s16, s4 57; SUPPRESS-NEXT: fnmsub s16, s16, s3, s18 58; SUPPRESS-NEXT: fmadd s3, s17, s3, s4 59; SUPPRESS-NEXT: fadd s4, s16, s6 60; SUPPRESS-NEXT: fadd s17, s3, s7 61; SUPPRESS-NEXT: stp s4, s17, [x8, #16] 62; SUPPRESS-NEXT: fsub s6, s6, s16 63; SUPPRESS-NEXT: fsub s3, s7, s3 64; SUPPRESS-NEXT: stp s6, s3, [x8, #24] 65; SUPPRESS-NEXT: ldr x9, [x0, #8] 66; SUPPRESS-NEXT: ldp s7, s16, [x9] 67; SUPPRESS-NEXT: fmul s18, s16, s17 68; SUPPRESS-NEXT: fmul s17, s7, s17 69; SUPPRESS-NEXT: fnmsub s7, s7, s4, s18 70; SUPPRESS-NEXT: fmadd s4, s16, s4, s17 71; SUPPRESS-NEXT: fadd s16, s7, s1 72; SUPPRESS-NEXT: fadd s17, s4, s5 73; SUPPRESS-NEXT: stp s16, s17, [x8] 74; SUPPRESS-NEXT: fsub s1, s1, s7 75; SUPPRESS-NEXT: fsub s4, s5, s4 76; SUPPRESS-NEXT: stp s1, s4, [x8, #16] 77; SUPPRESS-NEXT: ldr x10, [x0, #8] 78; SUPPRESS-NEXT: lsl x9, x3, #4 79; SUPPRESS-NEXT: add x10, x10, x9 80; SUPPRESS-NEXT: ldp s1, s4, [x10] 81; SUPPRESS-NEXT: fmul s5, s4, s3 82; SUPPRESS-NEXT: fmul s3, s1, s3 83; SUPPRESS-NEXT: fnmsub s1, s1, s6, s5 84; SUPPRESS-NEXT: fmadd s3, s4, s6, s3 85; SUPPRESS-NEXT: fadd s4, s1, s2 86; SUPPRESS-NEXT: fadd s5, s3, s0 87; SUPPRESS-NEXT: stp s4, s5, [x8, #8] 88; SUPPRESS-NEXT: fsub s1, s2, s1 89; SUPPRESS-NEXT: fsub s0, s0, s3 90; SUPPRESS-NEXT: stp s1, s0, [x8, #24] 91; SUPPRESS-NEXT: ldr x10, [x0, #8] 92; SUPPRESS-NEXT: ldp s0, s1, [x10] 93; SUPPRESS-NEXT: ldp s2, s3, [x8, #32] 94; SUPPRESS-NEXT: ldp s4, s5, [x8, #40] 95; SUPPRESS-NEXT: fmul s6, s5, s1 96; SUPPRESS-NEXT: fmul s1, s4, s1 97; SUPPRESS-NEXT: fnmsub s4, s4, s0, s6 98; SUPPRESS-NEXT: fmadd s0, s5, s0, s1 99; SUPPRESS-NEXT: fadd s1, s4, s2 100; SUPPRESS-NEXT: fadd s5, s0, s3 101; SUPPRESS-NEXT: stp s1, s5, [x8, #32] 102; SUPPRESS-NEXT: fsub s2, s2, s4 103; SUPPRESS-NEXT: fsub s3, s3, s0 104; SUPPRESS-NEXT: stp s2, s3, [x8, #40] 105; SUPPRESS-NEXT: ldr x10, [x0, #8] 106; SUPPRESS-NEXT: ldp s0, s4, [x10] 107; SUPPRESS-NEXT: ldp s6, s7, [x8, #48] 108; SUPPRESS-NEXT: ldp s16, s17, [x8, #56] 109; SUPPRESS-NEXT: fmul s18, s17, s4 110; SUPPRESS-NEXT: fmul s4, s16, s4 111; SUPPRESS-NEXT: fnmsub s16, s16, s0, s18 112; SUPPRESS-NEXT: fmadd s0, s17, s0, s4 113; SUPPRESS-NEXT: fadd s4, s16, s6 114; SUPPRESS-NEXT: fadd s17, s0, s7 115; SUPPRESS-NEXT: stp s4, s17, [x8, #48] 116; SUPPRESS-NEXT: fsub s6, s6, s16 117; SUPPRESS-NEXT: fsub s0, s7, s0 118; SUPPRESS-NEXT: stp s6, s0, [x8, #56] 119; SUPPRESS-NEXT: ldr x10, [x0, #8] 120; SUPPRESS-NEXT: ldp s7, s16, [x10] 121; SUPPRESS-NEXT: fmul s18, s16, s17 122; SUPPRESS-NEXT: fmul s17, s7, s17 123; SUPPRESS-NEXT: fnmsub s7, s7, s4, s18 124; SUPPRESS-NEXT: fmadd s4, s16, s4, s17 125; SUPPRESS-NEXT: fadd s16, s7, s1 126; SUPPRESS-NEXT: fadd s17, s4, s5 127; SUPPRESS-NEXT: stp s16, s17, [x8, #32] 128; SUPPRESS-NEXT: fsub s7, s1, s7 129; SUPPRESS-NEXT: fsub s4, s5, s4 130; SUPPRESS-NEXT: stp s7, s4, [x8, #48] 131; SUPPRESS-NEXT: ldr x10, [x0, #8] 132; SUPPRESS-NEXT: add x9, x10, x9 133; SUPPRESS-NEXT: ldp s1, s5, [x9] 134; SUPPRESS-NEXT: fmul s18, s5, s0 135; SUPPRESS-NEXT: fmul s0, s1, s0 136; SUPPRESS-NEXT: fnmsub s1, s1, s6, s18 137; SUPPRESS-NEXT: fmadd s5, s5, s6, s0 138; SUPPRESS-NEXT: fadd s6, s1, s2 139; SUPPRESS-NEXT: fadd s18, s5, s3 140; SUPPRESS-NEXT: stp s6, s18, [x8, #40] 141; SUPPRESS-NEXT: fsub s0, s2, s1 142; SUPPRESS-NEXT: fsub s1, s3, s5 143; SUPPRESS-NEXT: stp s0, s1, [x8, #56] 144; SUPPRESS-NEXT: ldr x9, [x0, #8] 145; SUPPRESS-NEXT: ldp s2, s3, [x9] 146; SUPPRESS-NEXT: ldp s5, s19, [x8] 147; SUPPRESS-NEXT: fmul s20, s17, s3 148; SUPPRESS-NEXT: fmul s3, s16, s3 149; SUPPRESS-NEXT: fnmsub s16, s16, s2, s20 150; SUPPRESS-NEXT: fmadd s2, s17, s2, s3 151; SUPPRESS-NEXT: fadd s3, s16, s5 152; SUPPRESS-NEXT: fadd s17, s2, s19 153; SUPPRESS-NEXT: stp s3, s17, [x8] 154; SUPPRESS-NEXT: fsub s3, s5, s16 155; SUPPRESS-NEXT: fsub s2, s19, s2 156; SUPPRESS-NEXT: stp s3, s2, [x8, #32] 157; SUPPRESS-NEXT: ldr x9, [x0, #8] 158; SUPPRESS-NEXT: add x9, x9, w3, sxtw #3 159; SUPPRESS-NEXT: ldp s2, s3, [x9] 160; SUPPRESS-NEXT: ldp s5, s16, [x8, #8] 161; SUPPRESS-NEXT: fmul s17, s18, s3 162; SUPPRESS-NEXT: fmul s3, s6, s3 163; SUPPRESS-NEXT: fnmsub s6, s6, s2, s17 164; SUPPRESS-NEXT: fmadd s2, s18, s2, s3 165; SUPPRESS-NEXT: fadd s3, s6, s5 166; SUPPRESS-NEXT: fadd s17, s2, s16 167; SUPPRESS-NEXT: stp s3, s17, [x8, #8] 168; SUPPRESS-NEXT: fsub s3, s5, s6 169; SUPPRESS-NEXT: fsub s2, s16, s2 170; SUPPRESS-NEXT: stp s3, s2, [x8, #40] 171; SUPPRESS-NEXT: lsl x9, x3, #33 172; SUPPRESS-NEXT: ldr x10, [x0, #8] 173; SUPPRESS-NEXT: add x9, x10, x9, asr #29 174; SUPPRESS-NEXT: ldp s2, s3, [x9] 175; SUPPRESS-NEXT: ldp s5, s6, [x8, #16] 176; SUPPRESS-NEXT: fmul s16, s4, s3 177; SUPPRESS-NEXT: fmul s3, s7, s3 178; SUPPRESS-NEXT: fnmsub s7, s7, s2, s16 179; SUPPRESS-NEXT: fmadd s2, s4, s2, s3 180; SUPPRESS-NEXT: fadd s3, s7, s5 181; SUPPRESS-NEXT: fadd s4, s2, s6 182; SUPPRESS-NEXT: stp s3, s4, [x8, #16] 183; SUPPRESS-NEXT: fsub s3, s5, s7 184; SUPPRESS-NEXT: fsub s2, s6, s2 185; SUPPRESS-NEXT: stp s3, s2, [x8, #48] 186; SUPPRESS-NEXT: add w9, w3, w3, lsl #1 187; SUPPRESS-NEXT: ldr x10, [x0, #8] 188; SUPPRESS-NEXT: add x9, x10, w9, sxtw #3 189; SUPPRESS-NEXT: ldp s2, s3, [x9] 190; SUPPRESS-NEXT: ldp s4, s5, [x8, #24] 191; SUPPRESS-NEXT: fmul s6, s1, s3 192; SUPPRESS-NEXT: fmul s3, s0, s3 193; SUPPRESS-NEXT: fnmsub s0, s0, s2, s6 194; SUPPRESS-NEXT: fmadd s1, s1, s2, s3 195; SUPPRESS-NEXT: fadd s2, s0, s4 196; SUPPRESS-NEXT: fadd s3, s1, s5 197; SUPPRESS-NEXT: stp s2, s3, [x8, #24] 198; SUPPRESS-NEXT: fsub s0, s4, s0 199; SUPPRESS-NEXT: fsub s1, s5, s1 200; SUPPRESS-NEXT: stp s0, s1, [x8, #56] 201; SUPPRESS-NEXT: ret 202; 203; NOSUPPRESS-LABEL: load_store_units_critical: 204; NOSUPPRESS: // %bb.0: // %bb 205; NOSUPPRESS-NEXT: ldr x8, [x0, #8] 206; NOSUPPRESS-NEXT: ldp s0, s1, [x8] 207; NOSUPPRESS-NEXT: add x8, x1, x2, lsl #3 208; NOSUPPRESS-NEXT: ldp s2, s3, [x8] 209; NOSUPPRESS-NEXT: ldp s4, s5, [x8, #8] 210; NOSUPPRESS-NEXT: fmul s6, s5, s1 211; NOSUPPRESS-NEXT: fmul s1, s4, s1 212; NOSUPPRESS-NEXT: fnmsub s4, s4, s0, s6 213; NOSUPPRESS-NEXT: fmadd s0, s5, s0, s1 214; NOSUPPRESS-NEXT: fadd s1, s4, s2 215; NOSUPPRESS-NEXT: fadd s5, s0, s3 216; NOSUPPRESS-NEXT: stp s1, s5, [x8] 217; NOSUPPRESS-NEXT: fsub s2, s2, s4 218; NOSUPPRESS-NEXT: fsub s0, s3, s0 219; NOSUPPRESS-NEXT: stp s2, s0, [x8, #8] 220; NOSUPPRESS-NEXT: ldr x9, [x0, #8] 221; NOSUPPRESS-NEXT: ldp s3, s4, [x9] 222; NOSUPPRESS-NEXT: ldp s6, s7, [x8, #16] 223; NOSUPPRESS-NEXT: ldp s16, s17, [x8, #24] 224; NOSUPPRESS-NEXT: fmul s18, s17, s4 225; NOSUPPRESS-NEXT: fmul s4, s16, s4 226; NOSUPPRESS-NEXT: fnmsub s16, s16, s3, s18 227; NOSUPPRESS-NEXT: fmadd s3, s17, s3, s4 228; NOSUPPRESS-NEXT: fadd s4, s16, s6 229; NOSUPPRESS-NEXT: fadd s17, s3, s7 230; NOSUPPRESS-NEXT: stp s4, s17, [x8, #16] 231; NOSUPPRESS-NEXT: fsub s6, s6, s16 232; NOSUPPRESS-NEXT: fsub s3, s7, s3 233; NOSUPPRESS-NEXT: stp s6, s3, [x8, #24] 234; NOSUPPRESS-NEXT: ldr x9, [x0, #8] 235; NOSUPPRESS-NEXT: ldp s7, s16, [x9] 236; NOSUPPRESS-NEXT: fmul s18, s16, s17 237; NOSUPPRESS-NEXT: fmul s17, s7, s17 238; NOSUPPRESS-NEXT: fnmsub s7, s7, s4, s18 239; NOSUPPRESS-NEXT: fmadd s4, s16, s4, s17 240; NOSUPPRESS-NEXT: fadd s16, s7, s1 241; NOSUPPRESS-NEXT: fadd s17, s4, s5 242; NOSUPPRESS-NEXT: stp s16, s17, [x8] 243; NOSUPPRESS-NEXT: fsub s1, s1, s7 244; NOSUPPRESS-NEXT: fsub s4, s5, s4 245; NOSUPPRESS-NEXT: stp s1, s4, [x8, #16] 246; NOSUPPRESS-NEXT: ldr x10, [x0, #8] 247; NOSUPPRESS-NEXT: lsl x9, x3, #4 248; NOSUPPRESS-NEXT: add x10, x10, x9 249; NOSUPPRESS-NEXT: ldp s1, s4, [x10] 250; NOSUPPRESS-NEXT: fmul s5, s4, s3 251; NOSUPPRESS-NEXT: fmul s3, s1, s3 252; NOSUPPRESS-NEXT: fnmsub s1, s1, s6, s5 253; NOSUPPRESS-NEXT: fmadd s3, s4, s6, s3 254; NOSUPPRESS-NEXT: fadd s4, s1, s2 255; NOSUPPRESS-NEXT: fadd s5, s3, s0 256; NOSUPPRESS-NEXT: stp s4, s5, [x8, #8] 257; NOSUPPRESS-NEXT: fsub s1, s2, s1 258; NOSUPPRESS-NEXT: fsub s0, s0, s3 259; NOSUPPRESS-NEXT: stp s1, s0, [x8, #24] 260; NOSUPPRESS-NEXT: ldr x10, [x0, #8] 261; NOSUPPRESS-NEXT: ldp s0, s1, [x10] 262; NOSUPPRESS-NEXT: ldp s2, s3, [x8, #32] 263; NOSUPPRESS-NEXT: ldp s4, s5, [x8, #40] 264; NOSUPPRESS-NEXT: fmul s6, s5, s1 265; NOSUPPRESS-NEXT: fmul s1, s4, s1 266; NOSUPPRESS-NEXT: fnmsub s4, s4, s0, s6 267; NOSUPPRESS-NEXT: fmadd s0, s5, s0, s1 268; NOSUPPRESS-NEXT: fadd s1, s4, s2 269; NOSUPPRESS-NEXT: fadd s5, s0, s3 270; NOSUPPRESS-NEXT: stp s1, s5, [x8, #32] 271; NOSUPPRESS-NEXT: fsub s2, s2, s4 272; NOSUPPRESS-NEXT: fsub s3, s3, s0 273; NOSUPPRESS-NEXT: stp s2, s3, [x8, #40] 274; NOSUPPRESS-NEXT: ldr x10, [x0, #8] 275; NOSUPPRESS-NEXT: ldp s0, s4, [x10] 276; NOSUPPRESS-NEXT: ldp s6, s7, [x8, #48] 277; NOSUPPRESS-NEXT: ldp s16, s17, [x8, #56] 278; NOSUPPRESS-NEXT: fmul s18, s17, s4 279; NOSUPPRESS-NEXT: fmul s4, s16, s4 280; NOSUPPRESS-NEXT: fnmsub s16, s16, s0, s18 281; NOSUPPRESS-NEXT: fmadd s0, s17, s0, s4 282; NOSUPPRESS-NEXT: fadd s4, s16, s6 283; NOSUPPRESS-NEXT: fadd s17, s0, s7 284; NOSUPPRESS-NEXT: stp s4, s17, [x8, #48] 285; NOSUPPRESS-NEXT: fsub s6, s6, s16 286; NOSUPPRESS-NEXT: fsub s0, s7, s0 287; NOSUPPRESS-NEXT: stp s6, s0, [x8, #56] 288; NOSUPPRESS-NEXT: ldr x10, [x0, #8] 289; NOSUPPRESS-NEXT: ldp s7, s16, [x10] 290; NOSUPPRESS-NEXT: fmul s18, s16, s17 291; NOSUPPRESS-NEXT: fmul s17, s7, s17 292; NOSUPPRESS-NEXT: fnmsub s7, s7, s4, s18 293; NOSUPPRESS-NEXT: fmadd s4, s16, s4, s17 294; NOSUPPRESS-NEXT: fadd s16, s7, s1 295; NOSUPPRESS-NEXT: fadd s17, s4, s5 296; NOSUPPRESS-NEXT: stp s16, s17, [x8, #32] 297; NOSUPPRESS-NEXT: fsub s7, s1, s7 298; NOSUPPRESS-NEXT: fsub s4, s5, s4 299; NOSUPPRESS-NEXT: stp s7, s4, [x8, #48] 300; NOSUPPRESS-NEXT: ldr x10, [x0, #8] 301; NOSUPPRESS-NEXT: add x9, x10, x9 302; NOSUPPRESS-NEXT: ldp s1, s5, [x9] 303; NOSUPPRESS-NEXT: fmul s18, s5, s0 304; NOSUPPRESS-NEXT: fmul s0, s1, s0 305; NOSUPPRESS-NEXT: fnmsub s1, s1, s6, s18 306; NOSUPPRESS-NEXT: fmadd s5, s5, s6, s0 307; NOSUPPRESS-NEXT: fadd s6, s1, s2 308; NOSUPPRESS-NEXT: fadd s18, s5, s3 309; NOSUPPRESS-NEXT: stp s6, s18, [x8, #40] 310; NOSUPPRESS-NEXT: fsub s0, s2, s1 311; NOSUPPRESS-NEXT: fsub s1, s3, s5 312; NOSUPPRESS-NEXT: stp s0, s1, [x8, #56] 313; NOSUPPRESS-NEXT: ldr x9, [x0, #8] 314; NOSUPPRESS-NEXT: ldp s2, s3, [x9] 315; NOSUPPRESS-NEXT: ldp s5, s19, [x8] 316; NOSUPPRESS-NEXT: fmul s20, s17, s3 317; NOSUPPRESS-NEXT: fmul s3, s16, s3 318; NOSUPPRESS-NEXT: fnmsub s16, s16, s2, s20 319; NOSUPPRESS-NEXT: fmadd s2, s17, s2, s3 320; NOSUPPRESS-NEXT: fadd s3, s16, s5 321; NOSUPPRESS-NEXT: fadd s17, s2, s19 322; NOSUPPRESS-NEXT: stp s3, s17, [x8] 323; NOSUPPRESS-NEXT: fsub s3, s5, s16 324; NOSUPPRESS-NEXT: fsub s2, s19, s2 325; NOSUPPRESS-NEXT: stp s3, s2, [x8, #32] 326; NOSUPPRESS-NEXT: ldr x9, [x0, #8] 327; NOSUPPRESS-NEXT: add x9, x9, w3, sxtw #3 328; NOSUPPRESS-NEXT: ldp s2, s3, [x9] 329; NOSUPPRESS-NEXT: ldp s5, s16, [x8, #8] 330; NOSUPPRESS-NEXT: fmul s17, s18, s3 331; NOSUPPRESS-NEXT: fmul s3, s6, s3 332; NOSUPPRESS-NEXT: fnmsub s6, s6, s2, s17 333; NOSUPPRESS-NEXT: fmadd s2, s18, s2, s3 334; NOSUPPRESS-NEXT: fadd s3, s6, s5 335; NOSUPPRESS-NEXT: fadd s17, s2, s16 336; NOSUPPRESS-NEXT: stp s3, s17, [x8, #8] 337; NOSUPPRESS-NEXT: fsub s3, s5, s6 338; NOSUPPRESS-NEXT: fsub s2, s16, s2 339; NOSUPPRESS-NEXT: stp s3, s2, [x8, #40] 340; NOSUPPRESS-NEXT: lsl x9, x3, #33 341; NOSUPPRESS-NEXT: ldr x10, [x0, #8] 342; NOSUPPRESS-NEXT: add x9, x10, x9, asr #29 343; NOSUPPRESS-NEXT: ldp s2, s3, [x9] 344; NOSUPPRESS-NEXT: ldp s5, s6, [x8, #16] 345; NOSUPPRESS-NEXT: fmul s16, s4, s3 346; NOSUPPRESS-NEXT: fmul s3, s7, s3 347; NOSUPPRESS-NEXT: fnmsub s7, s7, s2, s16 348; NOSUPPRESS-NEXT: fmadd s2, s4, s2, s3 349; NOSUPPRESS-NEXT: fadd s3, s7, s5 350; NOSUPPRESS-NEXT: fadd s4, s2, s6 351; NOSUPPRESS-NEXT: stp s3, s4, [x8, #16] 352; NOSUPPRESS-NEXT: fsub s3, s5, s7 353; NOSUPPRESS-NEXT: fsub s2, s6, s2 354; NOSUPPRESS-NEXT: stp s3, s2, [x8, #48] 355; NOSUPPRESS-NEXT: add w9, w3, w3, lsl #1 356; NOSUPPRESS-NEXT: ldr x10, [x0, #8] 357; NOSUPPRESS-NEXT: add x9, x10, w9, sxtw #3 358; NOSUPPRESS-NEXT: ldp s2, s3, [x9] 359; NOSUPPRESS-NEXT: ldp s4, s5, [x8, #24] 360; NOSUPPRESS-NEXT: fmul s6, s1, s3 361; NOSUPPRESS-NEXT: fmul s3, s0, s3 362; NOSUPPRESS-NEXT: fnmsub s0, s0, s2, s6 363; NOSUPPRESS-NEXT: fmadd s1, s1, s2, s3 364; NOSUPPRESS-NEXT: fadd s2, s0, s4 365; NOSUPPRESS-NEXT: fadd s3, s1, s5 366; NOSUPPRESS-NEXT: stp s2, s3, [x8, #24] 367; NOSUPPRESS-NEXT: fsub s0, s4, s0 368; NOSUPPRESS-NEXT: fsub s1, s5, s1 369; NOSUPPRESS-NEXT: stp s0, s1, [x8, #56] 370; NOSUPPRESS-NEXT: ret 371bb: 372 %shl = shl i64 %arg3, 1 373 %getelementptr = getelementptr inbounds i8, ptr %arg, i64 8 374 %load = load ptr, ptr %getelementptr, align 8 375 %load4 = load float, ptr %load, align 4 376 %getelementptr5 = getelementptr inbounds i8, ptr %load, i64 4 377 %load6 = load float, ptr %getelementptr5, align 4 378 %getelementptr7 = getelementptr %struct.widget, ptr %arg1, i64 %arg2 379 %load8 = load float, ptr %getelementptr7, align 4 380 %getelementptr9 = getelementptr inbounds i8, ptr %getelementptr7, i64 4 381 %load10 = load float, ptr %getelementptr9, align 4 382 %getelementptr11 = getelementptr i8, ptr %getelementptr7, i64 8 383 %load12 = load float, ptr %getelementptr11, align 4 384 %getelementptr13 = getelementptr i8, ptr %getelementptr7, i64 12 385 %load14 = load float, ptr %getelementptr13, align 4 386 %fmul = fmul fast float %load12, %load4 387 %fmul15 = fmul fast float %load14, %load6 388 %fmul16 = fmul fast float %load14, %load4 389 %fmul17 = fmul fast float %load12, %load6 390 %fsub = fsub fast float %fmul, %fmul15 391 %fadd = fadd fast float %fmul16, %fmul17 392 %fadd18 = fadd fast float %fsub, %load8 393 %fadd19 = fadd fast float %fadd, %load10 394 store float %fadd18, ptr %getelementptr7, align 4 395 store float %fadd19, ptr %getelementptr9, align 4 396 %fsub20 = fsub fast float %load8, %fsub 397 %fsub21 = fsub fast float %load10, %fadd 398 store float %fsub20, ptr %getelementptr11, align 4 399 store float %fsub21, ptr %getelementptr13, align 4 400 %load22 = load ptr, ptr %getelementptr, align 8 401 %load23 = load float, ptr %load22, align 4 402 %getelementptr24 = getelementptr inbounds i8, ptr %load22, i64 4 403 %load25 = load float, ptr %getelementptr24, align 4 404 %getelementptr26 = getelementptr i8, ptr %getelementptr7, i64 16 405 %load27 = load float, ptr %getelementptr26, align 4 406 %getelementptr28 = getelementptr i8, ptr %getelementptr7, i64 20 407 %load29 = load float, ptr %getelementptr28, align 4 408 %getelementptr30 = getelementptr i8, ptr %getelementptr7, i64 24 409 %load31 = load float, ptr %getelementptr30, align 4 410 %getelementptr32 = getelementptr i8, ptr %getelementptr7, i64 28 411 %load33 = load float, ptr %getelementptr32, align 4 412 %fmul34 = fmul fast float %load31, %load23 413 %fmul35 = fmul fast float %load33, %load25 414 %fmul36 = fmul fast float %load33, %load23 415 %fmul37 = fmul fast float %load31, %load25 416 %fsub38 = fsub fast float %fmul34, %fmul35 417 %fadd39 = fadd fast float %fmul36, %fmul37 418 %fadd40 = fadd fast float %fsub38, %load27 419 %fadd41 = fadd fast float %fadd39, %load29 420 store float %fadd40, ptr %getelementptr26, align 4 421 store float %fadd41, ptr %getelementptr28, align 4 422 %fsub42 = fsub fast float %load27, %fsub38 423 %fsub43 = fsub fast float %load29, %fadd39 424 store float %fsub42, ptr %getelementptr30, align 4 425 store float %fsub43, ptr %getelementptr32, align 4 426 %load44 = load ptr, ptr %getelementptr, align 8 427 %load45 = load float, ptr %load44, align 4 428 %getelementptr46 = getelementptr inbounds i8, ptr %load44, i64 4 429 %load47 = load float, ptr %getelementptr46, align 4 430 %fmul48 = fmul fast float %load45, %fadd40 431 %fmul49 = fmul fast float %load47, %fadd41 432 %fmul50 = fmul fast float %load45, %fadd41 433 %fmul51 = fmul fast float %load47, %fadd40 434 %fsub52 = fsub fast float %fmul48, %fmul49 435 %fadd53 = fadd fast float %fmul51, %fmul50 436 %fadd54 = fadd fast float %fsub52, %fadd18 437 %fadd55 = fadd fast float %fadd53, %fadd19 438 store float %fadd54, ptr %getelementptr7, align 4 439 store float %fadd55, ptr %getelementptr9, align 4 440 %fsub56 = fsub fast float %fadd18, %fsub52 441 %fsub57 = fsub fast float %fadd19, %fadd53 442 store float %fsub56, ptr %getelementptr26, align 4 443 store float %fsub57, ptr %getelementptr28, align 4 444 %load58 = load ptr, ptr %getelementptr, align 8 445 %getelementptr59 = getelementptr inbounds %struct.widget, ptr %load58, i64 %shl 446 %load60 = load float, ptr %getelementptr59, align 4 447 %getelementptr61 = getelementptr inbounds i8, ptr %getelementptr59, i64 4 448 %load62 = load float, ptr %getelementptr61, align 4 449 %fmul63 = fmul fast float %load60, %fsub42 450 %fmul64 = fmul fast float %load62, %fsub43 451 %fmul65 = fmul fast float %load60, %fsub43 452 %fmul66 = fmul fast float %load62, %fsub42 453 %fsub67 = fsub fast float %fmul63, %fmul64 454 %fadd68 = fadd fast float %fmul66, %fmul65 455 %fadd69 = fadd fast float %fsub67, %fsub20 456 %fadd70 = fadd fast float %fadd68, %fsub21 457 store float %fadd69, ptr %getelementptr11, align 4 458 store float %fadd70, ptr %getelementptr13, align 4 459 %fsub71 = fsub fast float %fsub20, %fsub67 460 %fsub72 = fsub fast float %fsub21, %fadd68 461 store float %fsub71, ptr %getelementptr30, align 4 462 store float %fsub72, ptr %getelementptr32, align 4 463 %load73 = load ptr, ptr %getelementptr, align 8 464 %load74 = load float, ptr %load73, align 4 465 %getelementptr75 = getelementptr inbounds i8, ptr %load73, i64 4 466 %load76 = load float, ptr %getelementptr75, align 4 467 %getelementptr77 = getelementptr i8, ptr %getelementptr7, i64 32 468 %load78 = load float, ptr %getelementptr77, align 4 469 %getelementptr79 = getelementptr i8, ptr %getelementptr7, i64 36 470 %load80 = load float, ptr %getelementptr79, align 4 471 %getelementptr81 = getelementptr i8, ptr %getelementptr7, i64 40 472 %load82 = load float, ptr %getelementptr81, align 4 473 %getelementptr83 = getelementptr i8, ptr %getelementptr7, i64 44 474 %load84 = load float, ptr %getelementptr83, align 4 475 %fmul85 = fmul fast float %load82, %load74 476 %fmul86 = fmul fast float %load84, %load76 477 %fmul87 = fmul fast float %load84, %load74 478 %fmul88 = fmul fast float %load82, %load76 479 %fsub89 = fsub fast float %fmul85, %fmul86 480 %fadd90 = fadd fast float %fmul87, %fmul88 481 %fadd91 = fadd fast float %fsub89, %load78 482 %fadd92 = fadd fast float %fadd90, %load80 483 store float %fadd91, ptr %getelementptr77, align 4 484 store float %fadd92, ptr %getelementptr79, align 4 485 %fsub93 = fsub fast float %load78, %fsub89 486 %fsub94 = fsub fast float %load80, %fadd90 487 store float %fsub93, ptr %getelementptr81, align 4 488 store float %fsub94, ptr %getelementptr83, align 4 489 %load95 = load ptr, ptr %getelementptr, align 8 490 %load96 = load float, ptr %load95, align 4 491 %getelementptr97 = getelementptr inbounds i8, ptr %load95, i64 4 492 %load98 = load float, ptr %getelementptr97, align 4 493 %getelementptr99 = getelementptr i8, ptr %getelementptr7, i64 48 494 %load100 = load float, ptr %getelementptr99, align 4 495 %getelementptr101 = getelementptr i8, ptr %getelementptr7, i64 52 496 %load102 = load float, ptr %getelementptr101, align 4 497 %getelementptr103 = getelementptr i8, ptr %getelementptr7, i64 56 498 %load104 = load float, ptr %getelementptr103, align 4 499 %getelementptr105 = getelementptr i8, ptr %getelementptr7, i64 60 500 %load106 = load float, ptr %getelementptr105, align 4 501 %fmul107 = fmul fast float %load104, %load96 502 %fmul108 = fmul fast float %load106, %load98 503 %fmul109 = fmul fast float %load106, %load96 504 %fmul110 = fmul fast float %load104, %load98 505 %fsub111 = fsub fast float %fmul107, %fmul108 506 %fadd112 = fadd fast float %fmul109, %fmul110 507 %fadd113 = fadd fast float %fsub111, %load100 508 %fadd114 = fadd fast float %fadd112, %load102 509 store float %fadd113, ptr %getelementptr99, align 4 510 store float %fadd114, ptr %getelementptr101, align 4 511 %fsub115 = fsub fast float %load100, %fsub111 512 %fsub116 = fsub fast float %load102, %fadd112 513 store float %fsub115, ptr %getelementptr103, align 4 514 store float %fsub116, ptr %getelementptr105, align 4 515 %load117 = load ptr, ptr %getelementptr, align 8 516 %load118 = load float, ptr %load117, align 4 517 %getelementptr119 = getelementptr inbounds i8, ptr %load117, i64 4 518 %load120 = load float, ptr %getelementptr119, align 4 519 %fmul121 = fmul fast float %load118, %fadd113 520 %fmul122 = fmul fast float %load120, %fadd114 521 %fmul123 = fmul fast float %load118, %fadd114 522 %fmul124 = fmul fast float %load120, %fadd113 523 %fsub125 = fsub fast float %fmul121, %fmul122 524 %fadd126 = fadd fast float %fmul124, %fmul123 525 %fadd127 = fadd fast float %fsub125, %fadd91 526 %fadd128 = fadd fast float %fadd126, %fadd92 527 store float %fadd127, ptr %getelementptr77, align 4 528 store float %fadd128, ptr %getelementptr79, align 4 529 %fsub129 = fsub fast float %fadd91, %fsub125 530 %fsub130 = fsub fast float %fadd92, %fadd126 531 store float %fsub129, ptr %getelementptr99, align 4 532 store float %fsub130, ptr %getelementptr101, align 4 533 %load131 = load ptr, ptr %getelementptr, align 8 534 %getelementptr132 = getelementptr inbounds %struct.widget, ptr %load131, i64 %shl 535 %load133 = load float, ptr %getelementptr132, align 4 536 %getelementptr134 = getelementptr inbounds i8, ptr %getelementptr132, i64 4 537 %load135 = load float, ptr %getelementptr134, align 4 538 %fmul136 = fmul fast float %load133, %fsub115 539 %fmul137 = fmul fast float %load135, %fsub116 540 %fmul138 = fmul fast float %load133, %fsub116 541 %fmul139 = fmul fast float %load135, %fsub115 542 %fsub140 = fsub fast float %fmul136, %fmul137 543 %fadd141 = fadd fast float %fmul139, %fmul138 544 %fadd142 = fadd fast float %fsub140, %fsub93 545 %fadd143 = fadd fast float %fadd141, %fsub94 546 store float %fadd142, ptr %getelementptr81, align 4 547 store float %fadd143, ptr %getelementptr83, align 4 548 %fsub144 = fsub fast float %fsub93, %fsub140 549 %fsub145 = fsub fast float %fsub94, %fadd141 550 store float %fsub144, ptr %getelementptr103, align 4 551 store float %fsub145, ptr %getelementptr105, align 4 552 %load146 = load ptr, ptr %getelementptr, align 8 553 %load147 = load float, ptr %load146, align 4 554 %getelementptr148 = getelementptr inbounds i8, ptr %load146, i64 4 555 %load149 = load float, ptr %getelementptr148, align 4 556 %load150 = load float, ptr %getelementptr7, align 4 557 %load151 = load float, ptr %getelementptr9, align 4 558 %fmul152 = fmul fast float %fadd127, %load147 559 %fmul153 = fmul fast float %fadd128, %load149 560 %fmul154 = fmul fast float %fadd128, %load147 561 %fmul155 = fmul fast float %fadd127, %load149 562 %fsub156 = fsub fast float %fmul152, %fmul153 563 %fadd157 = fadd fast float %fmul154, %fmul155 564 %fadd158 = fadd fast float %fsub156, %load150 565 %fadd159 = fadd fast float %fadd157, %load151 566 store float %fadd158, ptr %getelementptr7, align 4 567 store float %fadd159, ptr %getelementptr9, align 4 568 %fsub160 = fsub fast float %load150, %fsub156 569 %fsub161 = fsub fast float %load151, %fadd157 570 store float %fsub160, ptr %getelementptr77, align 4 571 store float %fsub161, ptr %getelementptr79, align 4 572 %shl162 = shl i64 %arg3, 32 573 %ashr = ashr exact i64 %shl162, 32 574 %load163 = load ptr, ptr %getelementptr, align 8 575 %getelementptr164 = getelementptr inbounds %struct.widget, ptr %load163, i64 %ashr 576 %load165 = load float, ptr %getelementptr164, align 4 577 %getelementptr166 = getelementptr inbounds i8, ptr %getelementptr164, i64 4 578 %load167 = load float, ptr %getelementptr166, align 4 579 %load168 = load float, ptr %getelementptr11, align 4 580 %getelementptr169 = getelementptr i8, ptr %getelementptr7, i64 12 581 %load170 = load float, ptr %getelementptr169, align 4 582 %getelementptr171 = getelementptr i8, ptr %getelementptr7, i64 40 583 %getelementptr172 = getelementptr i8, ptr %getelementptr7, i64 44 584 %fmul173 = fmul fast float %fadd142, %load165 585 %fmul174 = fmul fast float %fadd143, %load167 586 %fmul175 = fmul fast float %fadd143, %load165 587 %fmul176 = fmul fast float %fadd142, %load167 588 %fsub177 = fsub fast float %fmul173, %fmul174 589 %fadd178 = fadd fast float %fmul175, %fmul176 590 %fadd179 = fadd fast float %fsub177, %load168 591 %fadd180 = fadd fast float %fadd178, %load170 592 store float %fadd179, ptr %getelementptr11, align 4 593 store float %fadd180, ptr %getelementptr169, align 4 594 %fsub181 = fsub fast float %load168, %fsub177 595 %fsub182 = fsub fast float %load170, %fadd178 596 store float %fsub181, ptr %getelementptr171, align 4 597 store float %fsub182, ptr %getelementptr172, align 4 598 %shl183 = shl i64 %arg3, 33 599 %ashr184 = ashr exact i64 %shl183, 32 600 %load185 = load ptr, ptr %getelementptr, align 8 601 %getelementptr186 = getelementptr inbounds %struct.widget, ptr %load185, i64 %ashr184 602 %load187 = load float, ptr %getelementptr186, align 4 603 %getelementptr188 = getelementptr inbounds i8, ptr %getelementptr186, i64 4 604 %load189 = load float, ptr %getelementptr188, align 4 605 %load190 = load float, ptr %getelementptr26, align 4 606 %getelementptr191 = getelementptr i8, ptr %getelementptr7, i64 20 607 %load192 = load float, ptr %getelementptr191, align 4 608 %getelementptr193 = getelementptr i8, ptr %getelementptr7, i64 48 609 %getelementptr194 = getelementptr i8, ptr %getelementptr7, i64 52 610 %fmul195 = fmul fast float %fsub129, %load187 611 %fmul196 = fmul fast float %fsub130, %load189 612 %fmul197 = fmul fast float %fsub130, %load187 613 %fmul198 = fmul fast float %fsub129, %load189 614 %fsub199 = fsub fast float %fmul195, %fmul196 615 %fadd200 = fadd fast float %fmul197, %fmul198 616 %fadd201 = fadd fast float %fsub199, %load190 617 %fadd202 = fadd fast float %fadd200, %load192 618 store float %fadd201, ptr %getelementptr26, align 4 619 store float %fadd202, ptr %getelementptr191, align 4 620 %fsub203 = fsub fast float %load190, %fsub199 621 %fsub204 = fsub fast float %load192, %fadd200 622 store float %fsub203, ptr %getelementptr193, align 4 623 store float %fsub204, ptr %getelementptr194, align 4 624 %add = add i64 %ashr184, %arg3 625 %shl205 = shl i64 %add, 32 626 %ashr206 = ashr exact i64 %shl205, 32 627 %load207 = load ptr, ptr %getelementptr, align 8 628 %getelementptr208 = getelementptr inbounds %struct.widget, ptr %load207, i64 %ashr206 629 %load209 = load float, ptr %getelementptr208, align 4 630 %getelementptr210 = getelementptr inbounds i8, ptr %getelementptr208, i64 4 631 %load211 = load float, ptr %getelementptr210, align 4 632 %load212 = load float, ptr %getelementptr30, align 4 633 %getelementptr213 = getelementptr i8, ptr %getelementptr7, i64 28 634 %load214 = load float, ptr %getelementptr213, align 4 635 %getelementptr215 = getelementptr i8, ptr %getelementptr7, i64 56 636 %getelementptr216 = getelementptr i8, ptr %getelementptr7, i64 60 637 %fmul217 = fmul fast float %fsub144, %load209 638 %fmul218 = fmul fast float %fsub145, %load211 639 %fmul219 = fmul fast float %fsub145, %load209 640 %fmul220 = fmul fast float %fsub144, %load211 641 %fsub221 = fsub fast float %fmul217, %fmul218 642 %fadd222 = fadd fast float %fmul219, %fmul220 643 %fadd223 = fadd fast float %fsub221, %load212 644 %fadd224 = fadd fast float %fadd222, %load214 645 store float %fadd223, ptr %getelementptr30, align 4 646 store float %fadd224, ptr %getelementptr213, align 4 647 %fsub225 = fsub fast float %load212, %fsub221 648 %fsub226 = fsub fast float %load214, %fadd222 649 store float %fsub225, ptr %getelementptr215, align 4 650 store float %fsub226, ptr %getelementptr216, align 4 651 ret void 652} 653