341 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7 | FileCheck %s3; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=znver1 | FileCheck --check-prefix=CHECK-AMD %s4 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: ## %entry10; CHECK-NEXT: pushq %rbp11; CHECK-NEXT: .cfi_def_cfa_offset 1612; CHECK-NEXT: .cfi_offset %rbp, -1613; CHECK-NEXT: movq %rsp, %rbp14; CHECK-NEXT: .cfi_def_cfa_register %rbp15; CHECK-NEXT: Ltmp0:16; CHECK-NEXT: Ltmp1:17; CHECK-NEXT: nop18; CHECK-NEXT: Ltmp2:19; CHECK-NEXT: xchgw %ax, %ax20; 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: nop39; CHECK-NEXT: Ltmp12:40; CHECK-NEXT: nopw %cs:512(%rax,%rax)41; CHECK-NEXT: xchgw %ax, %ax42; 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: nop70; CHECK-NEXT: Ltmp22:71; CHECK-NEXT: nopw %cs:512(%rax,%rax)72; CHECK-NEXT: nopw %cs:512(%rax,%rax)73; CHECK-NEXT: xchgw %ax, %ax74; 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 %rbp108; CHECK-NEXT: retq109;110; CHECK-AMD-LABEL: nop_test:111; CHECK-AMD: ## %bb.0: ## %entry112; CHECK-AMD-NEXT: pushq %rbp113; CHECK-AMD-NEXT: .cfi_def_cfa_offset 16114; CHECK-AMD-NEXT: .cfi_offset %rbp, -16115; CHECK-AMD-NEXT: movq %rsp, %rbp116; CHECK-AMD-NEXT: .cfi_def_cfa_register %rbp117; CHECK-AMD-NEXT: Ltmp0:118; CHECK-AMD-NEXT: Ltmp1:119; CHECK-AMD-NEXT: nop120; CHECK-AMD-NEXT: Ltmp2:121; CHECK-AMD-NEXT: xchgw %ax, %ax122; 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 102140; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)141; CHECK-AMD-NEXT: Ltmp12:142; CHECK-AMD-NEXT: .byte 102143; CHECK-AMD-NEXT: .byte 102144; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)145; CHECK-AMD-NEXT: Ltmp13:146; CHECK-AMD-NEXT: .byte 102147; CHECK-AMD-NEXT: .byte 102148; CHECK-AMD-NEXT: .byte 102149; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)150; CHECK-AMD-NEXT: Ltmp14:151; CHECK-AMD-NEXT: .byte 102152; CHECK-AMD-NEXT: .byte 102153; CHECK-AMD-NEXT: .byte 102154; CHECK-AMD-NEXT: .byte 102155; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)156; CHECK-AMD-NEXT: Ltmp15:157; CHECK-AMD-NEXT: .byte 102158; CHECK-AMD-NEXT: .byte 102159; CHECK-AMD-NEXT: .byte 102160; CHECK-AMD-NEXT: .byte 102161; CHECK-AMD-NEXT: .byte 102162; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)163; CHECK-AMD-NEXT: Ltmp16:164; CHECK-AMD-NEXT: .byte 102165; CHECK-AMD-NEXT: .byte 102166; CHECK-AMD-NEXT: .byte 102167; CHECK-AMD-NEXT: .byte 102168; CHECK-AMD-NEXT: .byte 102169; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)170; CHECK-AMD-NEXT: nop171; CHECK-AMD-NEXT: Ltmp17:172; CHECK-AMD-NEXT: .byte 102173; CHECK-AMD-NEXT: .byte 102174; CHECK-AMD-NEXT: .byte 102175; CHECK-AMD-NEXT: .byte 102176; CHECK-AMD-NEXT: .byte 102177; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)178; CHECK-AMD-NEXT: xchgw %ax, %ax179; CHECK-AMD-NEXT: Ltmp18:180; CHECK-AMD-NEXT: .byte 102181; CHECK-AMD-NEXT: .byte 102182; CHECK-AMD-NEXT: .byte 102183; CHECK-AMD-NEXT: .byte 102184; CHECK-AMD-NEXT: .byte 102185; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)186; CHECK-AMD-NEXT: nopl (%rax)187; CHECK-AMD-NEXT: Ltmp19:188; CHECK-AMD-NEXT: .byte 102189; CHECK-AMD-NEXT: .byte 102190; CHECK-AMD-NEXT: .byte 102191; CHECK-AMD-NEXT: .byte 102192; CHECK-AMD-NEXT: .byte 102193; 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 102197; CHECK-AMD-NEXT: .byte 102198; CHECK-AMD-NEXT: .byte 102199; CHECK-AMD-NEXT: .byte 102200; CHECK-AMD-NEXT: .byte 102201; 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 102205; CHECK-AMD-NEXT: .byte 102206; CHECK-AMD-NEXT: .byte 102207; CHECK-AMD-NEXT: .byte 102208; CHECK-AMD-NEXT: .byte 102209; 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 102213; CHECK-AMD-NEXT: .byte 102214; CHECK-AMD-NEXT: .byte 102215; CHECK-AMD-NEXT: .byte 102216; CHECK-AMD-NEXT: .byte 102217; 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 102221; CHECK-AMD-NEXT: .byte 102222; CHECK-AMD-NEXT: .byte 102223; CHECK-AMD-NEXT: .byte 102224; CHECK-AMD-NEXT: .byte 102225; 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 102229; CHECK-AMD-NEXT: .byte 102230; CHECK-AMD-NEXT: .byte 102231; CHECK-AMD-NEXT: .byte 102232; CHECK-AMD-NEXT: .byte 102233; 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 102237; CHECK-AMD-NEXT: .byte 102238; CHECK-AMD-NEXT: .byte 102239; CHECK-AMD-NEXT: .byte 102240; CHECK-AMD-NEXT: .byte 102241; 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 102245; CHECK-AMD-NEXT: .byte 102246; CHECK-AMD-NEXT: .byte 102247; CHECK-AMD-NEXT: .byte 102248; CHECK-AMD-NEXT: .byte 102249; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)250; CHECK-AMD-NEXT: .byte 102251; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)252; CHECK-AMD-NEXT: Ltmp27:253; CHECK-AMD-NEXT: .byte 102254; CHECK-AMD-NEXT: .byte 102255; CHECK-AMD-NEXT: .byte 102256; CHECK-AMD-NEXT: .byte 102257; CHECK-AMD-NEXT: .byte 102258; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)259; CHECK-AMD-NEXT: .byte 102260; CHECK-AMD-NEXT: .byte 102261; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)262; CHECK-AMD-NEXT: Ltmp28:263; CHECK-AMD-NEXT: .byte 102264; CHECK-AMD-NEXT: .byte 102265; CHECK-AMD-NEXT: .byte 102266; CHECK-AMD-NEXT: .byte 102267; CHECK-AMD-NEXT: .byte 102268; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)269; CHECK-AMD-NEXT: .byte 102270; CHECK-AMD-NEXT: .byte 102271; CHECK-AMD-NEXT: .byte 102272; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)273; CHECK-AMD-NEXT: Ltmp29:274; CHECK-AMD-NEXT: .byte 102275; CHECK-AMD-NEXT: .byte 102276; CHECK-AMD-NEXT: .byte 102277; CHECK-AMD-NEXT: .byte 102278; CHECK-AMD-NEXT: .byte 102279; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)280; CHECK-AMD-NEXT: .byte 102281; CHECK-AMD-NEXT: .byte 102282; CHECK-AMD-NEXT: .byte 102283; CHECK-AMD-NEXT: .byte 102284; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)285; CHECK-AMD-NEXT: Ltmp30:286; CHECK-AMD-NEXT: .byte 102287; CHECK-AMD-NEXT: .byte 102288; CHECK-AMD-NEXT: .byte 102289; CHECK-AMD-NEXT: .byte 102290; CHECK-AMD-NEXT: .byte 102291; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)292; CHECK-AMD-NEXT: .byte 102293; CHECK-AMD-NEXT: .byte 102294; CHECK-AMD-NEXT: .byte 102295; CHECK-AMD-NEXT: .byte 102296; CHECK-AMD-NEXT: .byte 102297; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)298; CHECK-AMD-NEXT: Ltmp31:299; CHECK-AMD-NEXT: popq %rbp300; CHECK-AMD-NEXT: retq301entry: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 shadow334; optimization. This will force all 15 bytes of the previous shadow to be335; padded with nops.336 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 31, i32 0)337 ret void338}339 340declare void @llvm.experimental.stackmap(i64, i32, ...)341