1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7 | FileCheck %s 3; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=znver1 | FileCheck --check-prefix=CHECK-AMD %s 4 5; Check that we get a fast sequence of nops on each platform. 6 7define void @nop_test() { 8; CHECK-LABEL: nop_test: 9; CHECK: ## %bb.0: ## %entry 10; CHECK-NEXT: pushq %rbp 11; CHECK-NEXT: .cfi_def_cfa_offset 16 12; CHECK-NEXT: .cfi_offset %rbp, -16 13; CHECK-NEXT: movq %rsp, %rbp 14; CHECK-NEXT: .cfi_def_cfa_register %rbp 15; CHECK-NEXT: Ltmp0: 16; CHECK-NEXT: Ltmp1: 17; CHECK-NEXT: nop 18; CHECK-NEXT: Ltmp2: 19; CHECK-NEXT: xchgw %ax, %ax 20; CHECK-NEXT: Ltmp3: 21; CHECK-NEXT: nopl (%rax) 22; CHECK-NEXT: Ltmp4: 23; CHECK-NEXT: nopl 8(%rax) 24; CHECK-NEXT: Ltmp5: 25; CHECK-NEXT: nopl 8(%rax,%rax) 26; CHECK-NEXT: Ltmp6: 27; CHECK-NEXT: nopw 8(%rax,%rax) 28; CHECK-NEXT: Ltmp7: 29; CHECK-NEXT: nopl 512(%rax) 30; CHECK-NEXT: Ltmp8: 31; CHECK-NEXT: nopl 512(%rax,%rax) 32; CHECK-NEXT: Ltmp9: 33; CHECK-NEXT: nopw 512(%rax,%rax) 34; CHECK-NEXT: Ltmp10: 35; CHECK-NEXT: nopw %cs:512(%rax,%rax) 36; CHECK-NEXT: Ltmp11: 37; CHECK-NEXT: nopw %cs:512(%rax,%rax) 38; CHECK-NEXT: nop 39; CHECK-NEXT: Ltmp12: 40; CHECK-NEXT: nopw %cs:512(%rax,%rax) 41; CHECK-NEXT: xchgw %ax, %ax 42; CHECK-NEXT: Ltmp13: 43; CHECK-NEXT: nopw %cs:512(%rax,%rax) 44; CHECK-NEXT: nopl (%rax) 45; CHECK-NEXT: Ltmp14: 46; CHECK-NEXT: nopw %cs:512(%rax,%rax) 47; CHECK-NEXT: nopl 8(%rax) 48; CHECK-NEXT: Ltmp15: 49; CHECK-NEXT: nopw %cs:512(%rax,%rax) 50; CHECK-NEXT: nopl 8(%rax,%rax) 51; CHECK-NEXT: Ltmp16: 52; CHECK-NEXT: nopw %cs:512(%rax,%rax) 53; CHECK-NEXT: nopw 8(%rax,%rax) 54; CHECK-NEXT: Ltmp17: 55; CHECK-NEXT: nopw %cs:512(%rax,%rax) 56; CHECK-NEXT: nopl 512(%rax) 57; CHECK-NEXT: Ltmp18: 58; CHECK-NEXT: nopw %cs:512(%rax,%rax) 59; CHECK-NEXT: nopl 512(%rax,%rax) 60; CHECK-NEXT: Ltmp19: 61; CHECK-NEXT: nopw %cs:512(%rax,%rax) 62; CHECK-NEXT: nopw 512(%rax,%rax) 63; CHECK-NEXT: Ltmp20: 64; CHECK-NEXT: nopw %cs:512(%rax,%rax) 65; CHECK-NEXT: nopw %cs:512(%rax,%rax) 66; CHECK-NEXT: Ltmp21: 67; CHECK-NEXT: nopw %cs:512(%rax,%rax) 68; CHECK-NEXT: nopw %cs:512(%rax,%rax) 69; CHECK-NEXT: nop 70; CHECK-NEXT: Ltmp22: 71; CHECK-NEXT: nopw %cs:512(%rax,%rax) 72; CHECK-NEXT: nopw %cs:512(%rax,%rax) 73; CHECK-NEXT: xchgw %ax, %ax 74; CHECK-NEXT: Ltmp23: 75; CHECK-NEXT: nopw %cs:512(%rax,%rax) 76; CHECK-NEXT: nopw %cs:512(%rax,%rax) 77; CHECK-NEXT: nopl (%rax) 78; CHECK-NEXT: Ltmp24: 79; CHECK-NEXT: nopw %cs:512(%rax,%rax) 80; CHECK-NEXT: nopw %cs:512(%rax,%rax) 81; CHECK-NEXT: nopl 8(%rax) 82; CHECK-NEXT: Ltmp25: 83; CHECK-NEXT: nopw %cs:512(%rax,%rax) 84; CHECK-NEXT: nopw %cs:512(%rax,%rax) 85; CHECK-NEXT: nopl 8(%rax,%rax) 86; CHECK-NEXT: Ltmp26: 87; CHECK-NEXT: nopw %cs:512(%rax,%rax) 88; CHECK-NEXT: nopw %cs:512(%rax,%rax) 89; CHECK-NEXT: nopw 8(%rax,%rax) 90; CHECK-NEXT: Ltmp27: 91; CHECK-NEXT: nopw %cs:512(%rax,%rax) 92; CHECK-NEXT: nopw %cs:512(%rax,%rax) 93; CHECK-NEXT: nopl 512(%rax) 94; CHECK-NEXT: Ltmp28: 95; CHECK-NEXT: nopw %cs:512(%rax,%rax) 96; CHECK-NEXT: nopw %cs:512(%rax,%rax) 97; CHECK-NEXT: nopl 512(%rax,%rax) 98; CHECK-NEXT: Ltmp29: 99; CHECK-NEXT: nopw %cs:512(%rax,%rax) 100; CHECK-NEXT: nopw %cs:512(%rax,%rax) 101; CHECK-NEXT: nopw 512(%rax,%rax) 102; CHECK-NEXT: Ltmp30: 103; CHECK-NEXT: nopw %cs:512(%rax,%rax) 104; CHECK-NEXT: nopw %cs:512(%rax,%rax) 105; CHECK-NEXT: nopw %cs:512(%rax,%rax) 106; CHECK-NEXT: Ltmp31: 107; CHECK-NEXT: popq %rbp 108; CHECK-NEXT: retq 109; 110; CHECK-AMD-LABEL: nop_test: 111; CHECK-AMD: ## %bb.0: ## %entry 112; CHECK-AMD-NEXT: pushq %rbp 113; CHECK-AMD-NEXT: .cfi_def_cfa_offset 16 114; CHECK-AMD-NEXT: .cfi_offset %rbp, -16 115; CHECK-AMD-NEXT: movq %rsp, %rbp 116; CHECK-AMD-NEXT: .cfi_def_cfa_register %rbp 117; CHECK-AMD-NEXT: Ltmp0: 118; CHECK-AMD-NEXT: Ltmp1: 119; CHECK-AMD-NEXT: nop 120; CHECK-AMD-NEXT: Ltmp2: 121; CHECK-AMD-NEXT: xchgw %ax, %ax 122; CHECK-AMD-NEXT: Ltmp3: 123; CHECK-AMD-NEXT: nopl (%rax) 124; CHECK-AMD-NEXT: Ltmp4: 125; CHECK-AMD-NEXT: nopl 8(%rax) 126; CHECK-AMD-NEXT: Ltmp5: 127; CHECK-AMD-NEXT: nopl 8(%rax,%rax) 128; CHECK-AMD-NEXT: Ltmp6: 129; CHECK-AMD-NEXT: nopw 8(%rax,%rax) 130; CHECK-AMD-NEXT: Ltmp7: 131; CHECK-AMD-NEXT: nopl 512(%rax) 132; CHECK-AMD-NEXT: Ltmp8: 133; CHECK-AMD-NEXT: nopl 512(%rax,%rax) 134; CHECK-AMD-NEXT: Ltmp9: 135; CHECK-AMD-NEXT: nopw 512(%rax,%rax) 136; CHECK-AMD-NEXT: Ltmp10: 137; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 138; CHECK-AMD-NEXT: Ltmp11: 139; CHECK-AMD-NEXT: .byte 102 140; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 141; CHECK-AMD-NEXT: Ltmp12: 142; CHECK-AMD-NEXT: .byte 102 143; CHECK-AMD-NEXT: .byte 102 144; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 145; CHECK-AMD-NEXT: Ltmp13: 146; CHECK-AMD-NEXT: .byte 102 147; CHECK-AMD-NEXT: .byte 102 148; CHECK-AMD-NEXT: .byte 102 149; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 150; CHECK-AMD-NEXT: Ltmp14: 151; CHECK-AMD-NEXT: .byte 102 152; CHECK-AMD-NEXT: .byte 102 153; CHECK-AMD-NEXT: .byte 102 154; CHECK-AMD-NEXT: .byte 102 155; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 156; CHECK-AMD-NEXT: Ltmp15: 157; CHECK-AMD-NEXT: .byte 102 158; CHECK-AMD-NEXT: .byte 102 159; CHECK-AMD-NEXT: .byte 102 160; CHECK-AMD-NEXT: .byte 102 161; CHECK-AMD-NEXT: .byte 102 162; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 163; CHECK-AMD-NEXT: Ltmp16: 164; CHECK-AMD-NEXT: .byte 102 165; CHECK-AMD-NEXT: .byte 102 166; CHECK-AMD-NEXT: .byte 102 167; CHECK-AMD-NEXT: .byte 102 168; CHECK-AMD-NEXT: .byte 102 169; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 170; CHECK-AMD-NEXT: nop 171; CHECK-AMD-NEXT: Ltmp17: 172; CHECK-AMD-NEXT: .byte 102 173; CHECK-AMD-NEXT: .byte 102 174; CHECK-AMD-NEXT: .byte 102 175; CHECK-AMD-NEXT: .byte 102 176; CHECK-AMD-NEXT: .byte 102 177; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 178; CHECK-AMD-NEXT: xchgw %ax, %ax 179; CHECK-AMD-NEXT: Ltmp18: 180; CHECK-AMD-NEXT: .byte 102 181; CHECK-AMD-NEXT: .byte 102 182; CHECK-AMD-NEXT: .byte 102 183; CHECK-AMD-NEXT: .byte 102 184; CHECK-AMD-NEXT: .byte 102 185; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 186; CHECK-AMD-NEXT: nopl (%rax) 187; CHECK-AMD-NEXT: Ltmp19: 188; CHECK-AMD-NEXT: .byte 102 189; CHECK-AMD-NEXT: .byte 102 190; CHECK-AMD-NEXT: .byte 102 191; CHECK-AMD-NEXT: .byte 102 192; CHECK-AMD-NEXT: .byte 102 193; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 194; CHECK-AMD-NEXT: nopl 8(%rax) 195; CHECK-AMD-NEXT: Ltmp20: 196; CHECK-AMD-NEXT: .byte 102 197; CHECK-AMD-NEXT: .byte 102 198; CHECK-AMD-NEXT: .byte 102 199; CHECK-AMD-NEXT: .byte 102 200; CHECK-AMD-NEXT: .byte 102 201; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 202; CHECK-AMD-NEXT: nopl 8(%rax,%rax) 203; CHECK-AMD-NEXT: Ltmp21: 204; CHECK-AMD-NEXT: .byte 102 205; CHECK-AMD-NEXT: .byte 102 206; CHECK-AMD-NEXT: .byte 102 207; CHECK-AMD-NEXT: .byte 102 208; CHECK-AMD-NEXT: .byte 102 209; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 210; CHECK-AMD-NEXT: nopw 8(%rax,%rax) 211; CHECK-AMD-NEXT: Ltmp22: 212; CHECK-AMD-NEXT: .byte 102 213; CHECK-AMD-NEXT: .byte 102 214; CHECK-AMD-NEXT: .byte 102 215; CHECK-AMD-NEXT: .byte 102 216; CHECK-AMD-NEXT: .byte 102 217; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 218; CHECK-AMD-NEXT: nopl 512(%rax) 219; CHECK-AMD-NEXT: Ltmp23: 220; CHECK-AMD-NEXT: .byte 102 221; CHECK-AMD-NEXT: .byte 102 222; CHECK-AMD-NEXT: .byte 102 223; CHECK-AMD-NEXT: .byte 102 224; CHECK-AMD-NEXT: .byte 102 225; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 226; CHECK-AMD-NEXT: nopl 512(%rax,%rax) 227; CHECK-AMD-NEXT: Ltmp24: 228; CHECK-AMD-NEXT: .byte 102 229; CHECK-AMD-NEXT: .byte 102 230; CHECK-AMD-NEXT: .byte 102 231; CHECK-AMD-NEXT: .byte 102 232; CHECK-AMD-NEXT: .byte 102 233; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 234; CHECK-AMD-NEXT: nopw 512(%rax,%rax) 235; CHECK-AMD-NEXT: Ltmp25: 236; CHECK-AMD-NEXT: .byte 102 237; CHECK-AMD-NEXT: .byte 102 238; CHECK-AMD-NEXT: .byte 102 239; CHECK-AMD-NEXT: .byte 102 240; CHECK-AMD-NEXT: .byte 102 241; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 242; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 243; CHECK-AMD-NEXT: Ltmp26: 244; CHECK-AMD-NEXT: .byte 102 245; CHECK-AMD-NEXT: .byte 102 246; CHECK-AMD-NEXT: .byte 102 247; CHECK-AMD-NEXT: .byte 102 248; CHECK-AMD-NEXT: .byte 102 249; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 250; CHECK-AMD-NEXT: .byte 102 251; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 252; CHECK-AMD-NEXT: Ltmp27: 253; CHECK-AMD-NEXT: .byte 102 254; CHECK-AMD-NEXT: .byte 102 255; CHECK-AMD-NEXT: .byte 102 256; CHECK-AMD-NEXT: .byte 102 257; CHECK-AMD-NEXT: .byte 102 258; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 259; CHECK-AMD-NEXT: .byte 102 260; CHECK-AMD-NEXT: .byte 102 261; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 262; CHECK-AMD-NEXT: Ltmp28: 263; CHECK-AMD-NEXT: .byte 102 264; CHECK-AMD-NEXT: .byte 102 265; CHECK-AMD-NEXT: .byte 102 266; CHECK-AMD-NEXT: .byte 102 267; CHECK-AMD-NEXT: .byte 102 268; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 269; CHECK-AMD-NEXT: .byte 102 270; CHECK-AMD-NEXT: .byte 102 271; CHECK-AMD-NEXT: .byte 102 272; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 273; CHECK-AMD-NEXT: Ltmp29: 274; CHECK-AMD-NEXT: .byte 102 275; CHECK-AMD-NEXT: .byte 102 276; CHECK-AMD-NEXT: .byte 102 277; CHECK-AMD-NEXT: .byte 102 278; CHECK-AMD-NEXT: .byte 102 279; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 280; CHECK-AMD-NEXT: .byte 102 281; CHECK-AMD-NEXT: .byte 102 282; CHECK-AMD-NEXT: .byte 102 283; CHECK-AMD-NEXT: .byte 102 284; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 285; CHECK-AMD-NEXT: Ltmp30: 286; CHECK-AMD-NEXT: .byte 102 287; CHECK-AMD-NEXT: .byte 102 288; CHECK-AMD-NEXT: .byte 102 289; CHECK-AMD-NEXT: .byte 102 290; CHECK-AMD-NEXT: .byte 102 291; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 292; CHECK-AMD-NEXT: .byte 102 293; CHECK-AMD-NEXT: .byte 102 294; CHECK-AMD-NEXT: .byte 102 295; CHECK-AMD-NEXT: .byte 102 296; CHECK-AMD-NEXT: .byte 102 297; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax) 298; CHECK-AMD-NEXT: Ltmp31: 299; CHECK-AMD-NEXT: popq %rbp 300; CHECK-AMD-NEXT: retq 301entry: 302 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 0, i32 0) 303 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 1, i32 1) 304 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 2, i32 2) 305 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 3, i32 3) 306 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 4, i32 4) 307 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 5, i32 5) 308 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 6, i32 6) 309 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 7, i32 7) 310 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 8, i32 8) 311 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 9, i32 9) 312 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 10, i32 10) 313 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 11, i32 11) 314 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 12, i32 12) 315 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 13, i32 13) 316 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 14, i32 14) 317 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 15, i32 15) 318 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 16, i32 16) 319 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 17, i32 17) 320 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 18, i32 18) 321 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 19, i32 19) 322 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 20, i32 20) 323 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 21, i32 21) 324 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 22, i32 22) 325 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 23, i32 23) 326 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 24, i32 24) 327 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 25, i32 25) 328 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 26, i32 26) 329 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 27, i32 27) 330 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 28, i32 28) 331 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 29, i32 29) 332 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 30, i32 30) 333; Add an extra stackmap with a zero-length shadow to thwart the shadow 334; optimization. This will force all 15 bytes of the previous shadow to be 335; padded with nops. 336 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 31, i32 0) 337 ret void 338} 339 340declare void @llvm.experimental.stackmap(i64, i32, ...) 341