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