brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.7 KiB · d4a2525 Raw
271 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-- -mattr=-macrofusion,-branchfusion -post-RA-scheduler=0 | FileCheck %s --check-prefixes=NOFUSION,NOFUSION_NOPOSTRA3; RUN: llc < %s -mtriple=x86_64-- -mattr=-macrofusion,+branchfusion -post-RA-scheduler=0 | FileCheck %s --check-prefixes=FUSION,BRANCHFUSIONONLY_NOPOSTRA4; RUN: llc < %s -mtriple=x86_64-- -mattr=+macrofusion,-branchfusion -post-RA-scheduler=0 | FileCheck %s --check-prefixes=FUSION,MACROFUSION_NOPOSTRA5; RUN: llc < %s -mtriple=x86_64-- -mattr=-macrofusion,-branchfusion -post-RA-scheduler=1 | FileCheck %s --check-prefixes=NOFUSION,NOFUSION_POSTRA6; RUN: llc < %s -mtriple=x86_64-- -mattr=-macrofusion,+branchfusion -post-RA-scheduler=1 | FileCheck %s --check-prefixes=FUSION,BRANCHFUSION_POSTRA7; RUN: llc < %s -mtriple=x86_64-- -mattr=+macrofusion,-branchfusion -post-RA-scheduler=1 | FileCheck %s --check-prefixes=FUSION,BRANCHFUSION_POSTRA8; RUN: llc < %s -mtriple=x86_64-- -mattr=-macrofusion,-branchfusion -enable-misched=0 -misched-postra=1 -enable-post-misched | FileCheck %s --check-prefixes=NOFUSION,NOFUSION_MISCHEDPOSTRA9; RUN: llc < %s -mtriple=x86_64-- -mattr=-macrofusion,+branchfusion -enable-misched=0 -misched-postra=1 -enable-post-misched | FileCheck %s --check-prefixes=FUSION,BRANCHFUSION_MISCHEDPOSTRA10; RUN: llc < %s -mtriple=x86_64-- -mattr=+macrofusion,-branchfusion -enable-misched=0 -misched-postra=1 -enable-post-misched | FileCheck %s --check-prefixes=FUSION,BRANCHFUSION_MISCHEDPOSTRA11 12 13 14; testb should be scheduled right before je to enable macro-fusion.15 16define i32 @macrofuse_test_je(i32 %flags, ptr %p) nounwind {17; NOFUSION-LABEL: macrofuse_test_je:18; NOFUSION:       # %bb.0: # %entry19; NOFUSION-NEXT:    xorl %eax, %eax20; NOFUSION-NEXT:    testl $512, %edi # imm = 0x20021; NOFUSION-NEXT:    movb $1, (%rsi)22; NOFUSION-NEXT:    je .LBB0_223; NOFUSION-NEXT:  # %bb.1: # %if.then24; NOFUSION-NEXT:    movl $1, %eax25; NOFUSION-NEXT:  .LBB0_2: # %if.end26; NOFUSION-NEXT:    retq27;28; FUSION-LABEL: macrofuse_test_je:29; FUSION:       # %bb.0: # %entry30; FUSION-NEXT:    xorl %eax, %eax31; FUSION-NEXT:    movb $1, (%rsi)32; FUSION-NEXT:    testl $512, %edi # imm = 0x20033; FUSION-NEXT:    je .LBB0_234; FUSION-NEXT:  # %bb.1: # %if.then35; FUSION-NEXT:    movl $1, %eax36; FUSION-NEXT:  .LBB0_2: # %if.end37; FUSION-NEXT:    retq38entry:39  %and = and i32 %flags, 51240  %tobool = icmp eq i32 %and, 041  store i8 1, ptr %p42  br i1 %tobool, label %if.end, label %if.then43 44if.then:45  br label %if.end46 47if.end:48  %hasflag = phi i32 [ 1, %if.then ], [ 0, %entry ]49  ret i32 %hasflag50}51 52define i32 @macrofuse_cmp_je(i32 %flags, ptr %p) nounwind {53; NOFUSION-LABEL: macrofuse_cmp_je:54; NOFUSION:       # %bb.0: # %entry55; NOFUSION-NEXT:    cmpl $512, %edi # imm = 0x20056; NOFUSION-NEXT:    movb $1, (%rsi)57; NOFUSION-NEXT:    je .LBB1_158; NOFUSION-NEXT:  # %bb.2: # %if.then59; NOFUSION-NEXT:    movl $1, %eax60; NOFUSION-NEXT:    retq61; NOFUSION-NEXT:  .LBB1_1:62; NOFUSION-NEXT:    xorl %eax, %eax63; NOFUSION-NEXT:    retq64;65; FUSION-LABEL: macrofuse_cmp_je:66; FUSION:       # %bb.0: # %entry67; FUSION-NEXT:    movb $1, (%rsi)68; FUSION-NEXT:    cmpl $512, %edi # imm = 0x20069; FUSION-NEXT:    je .LBB1_170; FUSION-NEXT:  # %bb.2: # %if.then71; FUSION-NEXT:    movl $1, %eax72; FUSION-NEXT:    retq73; FUSION-NEXT:  .LBB1_1:74; FUSION-NEXT:    xorl %eax, %eax75; FUSION-NEXT:    retq76entry:77  %sub = sub i32 %flags, 51278  %tobool = icmp eq i32 %sub, 079  store i8 1, ptr %p80  br i1 %tobool, label %if.end, label %if.then81 82if.then:83  br label %if.end84 85if.end:86  %hasflag = phi i32 [ 1, %if.then ], [ 0, %entry ]87  ret i32 %hasflag88}89 90define i32 @macrofuse_alu_je(i32 %flags, ptr %p) nounwind {91; NOFUSION_NOPOSTRA-LABEL: macrofuse_alu_je:92; NOFUSION_NOPOSTRA:       # %bb.0: # %entry93; NOFUSION_NOPOSTRA-NEXT:    movl %edi, %eax94; NOFUSION_NOPOSTRA-NEXT:    addl $-512, %eax # imm = 0xFE0095; NOFUSION_NOPOSTRA-NEXT:    movb $1, (%rsi)96; NOFUSION_NOPOSTRA-NEXT:    je .LBB2_297; NOFUSION_NOPOSTRA-NEXT:  # %bb.1: # %if.then98; NOFUSION_NOPOSTRA-NEXT:    movl $1, %eax99; NOFUSION_NOPOSTRA-NEXT:  .LBB2_2: # %if.end100; NOFUSION_NOPOSTRA-NEXT:    retq101;102; BRANCHFUSIONONLY_NOPOSTRA-LABEL: macrofuse_alu_je:103; BRANCHFUSIONONLY_NOPOSTRA:       # %bb.0: # %entry104; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    movl %edi, %eax105; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    addl $-512, %eax # imm = 0xFE00106; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    movb $1, (%rsi)107; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    je .LBB2_2108; BRANCHFUSIONONLY_NOPOSTRA-NEXT:  # %bb.1: # %if.then109; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    movl $1, %eax110; BRANCHFUSIONONLY_NOPOSTRA-NEXT:  .LBB2_2: # %if.end111; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    retq112;113; MACROFUSION_NOPOSTRA-LABEL: macrofuse_alu_je:114; MACROFUSION_NOPOSTRA:       # %bb.0: # %entry115; MACROFUSION_NOPOSTRA-NEXT:    movl %edi, %eax116; MACROFUSION_NOPOSTRA-NEXT:    movb $1, (%rsi)117; MACROFUSION_NOPOSTRA-NEXT:    addl $-512, %eax # imm = 0xFE00118; MACROFUSION_NOPOSTRA-NEXT:    je .LBB2_2119; MACROFUSION_NOPOSTRA-NEXT:  # %bb.1: # %if.then120; MACROFUSION_NOPOSTRA-NEXT:    movl $1, %eax121; MACROFUSION_NOPOSTRA-NEXT:  .LBB2_2: # %if.end122; MACROFUSION_NOPOSTRA-NEXT:    retq123;124; NOFUSION_POSTRA-LABEL: macrofuse_alu_je:125; NOFUSION_POSTRA:       # %bb.0: # %entry126; NOFUSION_POSTRA-NEXT:    movl %edi, %eax127; NOFUSION_POSTRA-NEXT:    movb $1, (%rsi)128; NOFUSION_POSTRA-NEXT:    addl $-512, %eax # imm = 0xFE00129; NOFUSION_POSTRA-NEXT:    je .LBB2_2130; NOFUSION_POSTRA-NEXT:  # %bb.1: # %if.then131; NOFUSION_POSTRA-NEXT:    movl $1, %eax132; NOFUSION_POSTRA-NEXT:  .LBB2_2: # %if.end133; NOFUSION_POSTRA-NEXT:    retq134;135; BRANCHFUSION_POSTRA-LABEL: macrofuse_alu_je:136; BRANCHFUSION_POSTRA:       # %bb.0: # %entry137; BRANCHFUSION_POSTRA-NEXT:    movl %edi, %eax138; BRANCHFUSION_POSTRA-NEXT:    movb $1, (%rsi)139; BRANCHFUSION_POSTRA-NEXT:    addl $-512, %eax # imm = 0xFE00140; BRANCHFUSION_POSTRA-NEXT:    je .LBB2_2141; BRANCHFUSION_POSTRA-NEXT:  # %bb.1: # %if.then142; BRANCHFUSION_POSTRA-NEXT:    movl $1, %eax143; BRANCHFUSION_POSTRA-NEXT:  .LBB2_2: # %if.end144; BRANCHFUSION_POSTRA-NEXT:    retq145;146; NOFUSION_MISCHEDPOSTRA-LABEL: macrofuse_alu_je:147; NOFUSION_MISCHEDPOSTRA:       # %bb.0: # %entry148; NOFUSION_MISCHEDPOSTRA-NEXT:    movl %edi, %eax149; NOFUSION_MISCHEDPOSTRA-NEXT:    movb $1, (%rsi)150; NOFUSION_MISCHEDPOSTRA-NEXT:    addl $-512, %eax # imm = 0xFE00151; NOFUSION_MISCHEDPOSTRA-NEXT:    je .LBB2_2152; NOFUSION_MISCHEDPOSTRA-NEXT:  # %bb.1: # %if.then153; NOFUSION_MISCHEDPOSTRA-NEXT:    movl $1, %eax154; NOFUSION_MISCHEDPOSTRA-NEXT:  .LBB2_2: # %if.end155; NOFUSION_MISCHEDPOSTRA-NEXT:    retq156;157; BRANCHFUSION_MISCHEDPOSTRA-LABEL: macrofuse_alu_je:158; BRANCHFUSION_MISCHEDPOSTRA:       # %bb.0: # %entry159; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    movl %edi, %eax160; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    movb $1, (%rsi)161; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    addl $-512, %eax # imm = 0xFE00162; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    je .LBB2_2163; BRANCHFUSION_MISCHEDPOSTRA-NEXT:  # %bb.1: # %if.then164; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    movl $1, %eax165; BRANCHFUSION_MISCHEDPOSTRA-NEXT:  .LBB2_2: # %if.end166; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    retq167entry:168  %sub = sub i32 %flags, 512169  %tobool = icmp eq i32 %sub, 0170  store i8 1, ptr %p171  br i1 %tobool, label %if.end, label %if.then172 173if.then:174  br label %if.end175 176if.end:177  %hasflag = phi i32 [ 1, %if.then ], [ %sub, %entry ]178  ret i32 %hasflag179}180 181define i32 @macrofuse_dec_je(i32 %flags, ptr %p) nounwind {182; NOFUSION_NOPOSTRA-LABEL: macrofuse_dec_je:183; NOFUSION_NOPOSTRA:       # %bb.0: # %entry184; NOFUSION_NOPOSTRA-NEXT:    movl %edi, %eax185; NOFUSION_NOPOSTRA-NEXT:    decl %eax186; NOFUSION_NOPOSTRA-NEXT:    movb $1, (%rsi)187; NOFUSION_NOPOSTRA-NEXT:    je .LBB3_2188; NOFUSION_NOPOSTRA-NEXT:  # %bb.1: # %if.then189; NOFUSION_NOPOSTRA-NEXT:    movl $1, %eax190; NOFUSION_NOPOSTRA-NEXT:  .LBB3_2: # %if.end191; NOFUSION_NOPOSTRA-NEXT:    retq192;193; BRANCHFUSIONONLY_NOPOSTRA-LABEL: macrofuse_dec_je:194; BRANCHFUSIONONLY_NOPOSTRA:       # %bb.0: # %entry195; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    movl %edi, %eax196; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    decl %eax197; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    movb $1, (%rsi)198; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    je .LBB3_2199; BRANCHFUSIONONLY_NOPOSTRA-NEXT:  # %bb.1: # %if.then200; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    movl $1, %eax201; BRANCHFUSIONONLY_NOPOSTRA-NEXT:  .LBB3_2: # %if.end202; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    retq203;204; MACROFUSION_NOPOSTRA-LABEL: macrofuse_dec_je:205; MACROFUSION_NOPOSTRA:       # %bb.0: # %entry206; MACROFUSION_NOPOSTRA-NEXT:    movl %edi, %eax207; MACROFUSION_NOPOSTRA-NEXT:    movb $1, (%rsi)208; MACROFUSION_NOPOSTRA-NEXT:    decl %eax209; MACROFUSION_NOPOSTRA-NEXT:    je .LBB3_2210; MACROFUSION_NOPOSTRA-NEXT:  # %bb.1: # %if.then211; MACROFUSION_NOPOSTRA-NEXT:    movl $1, %eax212; MACROFUSION_NOPOSTRA-NEXT:  .LBB3_2: # %if.end213; MACROFUSION_NOPOSTRA-NEXT:    retq214;215; NOFUSION_POSTRA-LABEL: macrofuse_dec_je:216; NOFUSION_POSTRA:       # %bb.0: # %entry217; NOFUSION_POSTRA-NEXT:    movl %edi, %eax218; NOFUSION_POSTRA-NEXT:    movb $1, (%rsi)219; NOFUSION_POSTRA-NEXT:    decl %eax220; NOFUSION_POSTRA-NEXT:    je .LBB3_2221; NOFUSION_POSTRA-NEXT:  # %bb.1: # %if.then222; NOFUSION_POSTRA-NEXT:    movl $1, %eax223; NOFUSION_POSTRA-NEXT:  .LBB3_2: # %if.end224; NOFUSION_POSTRA-NEXT:    retq225;226; BRANCHFUSION_POSTRA-LABEL: macrofuse_dec_je:227; BRANCHFUSION_POSTRA:       # %bb.0: # %entry228; BRANCHFUSION_POSTRA-NEXT:    movl %edi, %eax229; BRANCHFUSION_POSTRA-NEXT:    movb $1, (%rsi)230; BRANCHFUSION_POSTRA-NEXT:    decl %eax231; BRANCHFUSION_POSTRA-NEXT:    je .LBB3_2232; BRANCHFUSION_POSTRA-NEXT:  # %bb.1: # %if.then233; BRANCHFUSION_POSTRA-NEXT:    movl $1, %eax234; BRANCHFUSION_POSTRA-NEXT:  .LBB3_2: # %if.end235; BRANCHFUSION_POSTRA-NEXT:    retq236;237; NOFUSION_MISCHEDPOSTRA-LABEL: macrofuse_dec_je:238; NOFUSION_MISCHEDPOSTRA:       # %bb.0: # %entry239; NOFUSION_MISCHEDPOSTRA-NEXT:    movl %edi, %eax240; NOFUSION_MISCHEDPOSTRA-NEXT:    movb $1, (%rsi)241; NOFUSION_MISCHEDPOSTRA-NEXT:    decl %eax242; NOFUSION_MISCHEDPOSTRA-NEXT:    je .LBB3_2243; NOFUSION_MISCHEDPOSTRA-NEXT:  # %bb.1: # %if.then244; NOFUSION_MISCHEDPOSTRA-NEXT:    movl $1, %eax245; NOFUSION_MISCHEDPOSTRA-NEXT:  .LBB3_2: # %if.end246; NOFUSION_MISCHEDPOSTRA-NEXT:    retq247;248; BRANCHFUSION_MISCHEDPOSTRA-LABEL: macrofuse_dec_je:249; BRANCHFUSION_MISCHEDPOSTRA:       # %bb.0: # %entry250; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    movl %edi, %eax251; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    movb $1, (%rsi)252; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    decl %eax253; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    je .LBB3_2254; BRANCHFUSION_MISCHEDPOSTRA-NEXT:  # %bb.1: # %if.then255; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    movl $1, %eax256; BRANCHFUSION_MISCHEDPOSTRA-NEXT:  .LBB3_2: # %if.end257; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    retq258entry:259  %sub = sub i32 %flags, 1260  %tobool = icmp eq i32 %sub, 0261  store i8 1, ptr %p262  br i1 %tobool, label %if.end, label %if.then263 264if.then:265  br label %if.end266 267if.end:268  %hasflag = phi i32 [ 1, %if.then ], [ %sub, %entry ]269  ret i32 %hasflag270}271