971 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=x86_64-- < %s -pre-RA-sched=list-ilp | FileCheck %s --check-prefix=ILP3; RUN: llc -mtriple=x86_64-- < %s -pre-RA-sched=list-hybrid | FileCheck %s --check-prefix=HYBRID4; RUN: llc -mtriple=x86_64-- < %s -pre-RA-sched=list-burr | FileCheck %s --check-prefix=BURR5; RUN: llc -mtriple=x86_64-- < %s -pre-RA-sched=source | FileCheck %s --check-prefix=SRC6; FIXME: Fix machine verifier issues and remove -verify-machineinstrs=0. PR39452.7; RUN: llc -mtriple=x86_64-- < %s -pre-RA-sched=linearize -verify-machineinstrs=0 | FileCheck %s --check-prefix=LIN8 9; PR22304 https://llvm.org/bugs/show_bug.cgi?id=2230410; Tests checking backtracking in source scheduler. llc used to crash on them.11 12define i256 @test1(i256 %a) nounwind {13; ILP-LABEL: test1:14; ILP: # %bb.0:15; ILP-NEXT: movq %rdi, %rax16; ILP-NEXT: xorps %xmm0, %xmm017; ILP-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)18; ILP-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)19; ILP-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)20; ILP-NEXT: leal (%rsi,%rsi), %ecx21; ILP-NEXT: addb $3, %cl22; ILP-NEXT: movq $0, -{{[0-9]+}}(%rsp)23; ILP-NEXT: movq $1, -{{[0-9]+}}(%rsp)24; ILP-NEXT: movl %ecx, %edx25; ILP-NEXT: shrb $3, %dl26; ILP-NEXT: andb $24, %dl27; ILP-NEXT: negb %dl28; ILP-NEXT: movsbq %dl, %rdx29; ILP-NEXT: movq -24(%rsp,%rdx), %rsi30; ILP-NEXT: movq -16(%rsp,%rdx), %rdi31; ILP-NEXT: shldq %cl, %rsi, %rdi32; ILP-NEXT: movq -40(%rsp,%rdx), %r833; ILP-NEXT: movq -32(%rsp,%rdx), %rdx34; ILP-NEXT: movq %r8, %r935; ILP-NEXT: shlq %cl, %r936; ILP-NEXT: movq %rdx, %r1037; ILP-NEXT: shldq %cl, %r8, %r1038; ILP-NEXT: movq %rdi, 24(%rax)39; ILP-NEXT: movq %r10, 8(%rax)40; ILP-NEXT: movq %r9, (%rax)41; ILP-NEXT: shlq %cl, %rsi42; ILP-NEXT: notb %cl43; ILP-NEXT: shrq %rdx44; ILP-NEXT: # kill: def $cl killed $cl killed $ecx45; ILP-NEXT: shrq %cl, %rdx46; ILP-NEXT: orq %rsi, %rdx47; ILP-NEXT: movq %rdx, 16(%rax)48; ILP-NEXT: retq49;50; HYBRID-LABEL: test1:51; HYBRID: # %bb.0:52; HYBRID-NEXT: movq %rdi, %rax53; HYBRID-NEXT: xorps %xmm0, %xmm054; HYBRID-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)55; HYBRID-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)56; HYBRID-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)57; HYBRID-NEXT: movq $0, -{{[0-9]+}}(%rsp)58; HYBRID-NEXT: movq $1, -{{[0-9]+}}(%rsp)59; HYBRID-NEXT: leal (%rsi,%rsi), %ecx60; HYBRID-NEXT: addb $3, %cl61; HYBRID-NEXT: movl %ecx, %edx62; HYBRID-NEXT: shrb $3, %dl63; HYBRID-NEXT: andb $24, %dl64; HYBRID-NEXT: negb %dl65; HYBRID-NEXT: movsbq %dl, %rdx66; HYBRID-NEXT: movq -24(%rsp,%rdx), %rsi67; HYBRID-NEXT: movq -16(%rsp,%rdx), %rdi68; HYBRID-NEXT: shldq %cl, %rsi, %rdi69; HYBRID-NEXT: movq %rdi, 24(%rax)70; HYBRID-NEXT: movq -40(%rsp,%rdx), %rdi71; HYBRID-NEXT: movq -32(%rsp,%rdx), %rdx72; HYBRID-NEXT: movq %rdx, %r873; HYBRID-NEXT: shldq %cl, %rdi, %r874; HYBRID-NEXT: movq %r8, 8(%rax)75; HYBRID-NEXT: shlq %cl, %rdi76; HYBRID-NEXT: movq %rdi, (%rax)77; HYBRID-NEXT: shlq %cl, %rsi78; HYBRID-NEXT: notb %cl79; HYBRID-NEXT: shrq %rdx80; HYBRID-NEXT: # kill: def $cl killed $cl killed $ecx81; HYBRID-NEXT: shrq %cl, %rdx82; HYBRID-NEXT: orq %rsi, %rdx83; HYBRID-NEXT: movq %rdx, 16(%rax)84; HYBRID-NEXT: retq85;86; BURR-LABEL: test1:87; BURR: # %bb.0:88; BURR-NEXT: movq %rdi, %rax89; BURR-NEXT: xorps %xmm0, %xmm090; BURR-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)91; BURR-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)92; BURR-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)93; BURR-NEXT: movq $0, -{{[0-9]+}}(%rsp)94; BURR-NEXT: movq $1, -{{[0-9]+}}(%rsp)95; BURR-NEXT: leal (%rsi,%rsi), %ecx96; BURR-NEXT: addb $3, %cl97; BURR-NEXT: movl %ecx, %edx98; BURR-NEXT: shrb $3, %dl99; BURR-NEXT: andb $24, %dl100; BURR-NEXT: negb %dl101; BURR-NEXT: movsbq %dl, %rdx102; BURR-NEXT: movq -24(%rsp,%rdx), %rsi103; BURR-NEXT: movq -16(%rsp,%rdx), %rdi104; BURR-NEXT: shldq %cl, %rsi, %rdi105; BURR-NEXT: movq %rdi, 24(%rax)106; BURR-NEXT: movq -40(%rsp,%rdx), %rdi107; BURR-NEXT: movq -32(%rsp,%rdx), %rdx108; BURR-NEXT: movq %rdx, %r8109; BURR-NEXT: shldq %cl, %rdi, %r8110; BURR-NEXT: movq %r8, 8(%rax)111; BURR-NEXT: shlq %cl, %rdi112; BURR-NEXT: movq %rdi, (%rax)113; BURR-NEXT: shlq %cl, %rsi114; BURR-NEXT: notb %cl115; BURR-NEXT: shrq %rdx116; BURR-NEXT: # kill: def $cl killed $cl killed $ecx117; BURR-NEXT: shrq %cl, %rdx118; BURR-NEXT: orq %rsi, %rdx119; BURR-NEXT: movq %rdx, 16(%rax)120; BURR-NEXT: retq121;122; SRC-LABEL: test1:123; SRC: # %bb.0:124; SRC-NEXT: movq %rdi, %rax125; SRC-NEXT: leal (%rsi,%rsi), %edx126; SRC-NEXT: addb $3, %dl127; SRC-NEXT: xorps %xmm0, %xmm0128; SRC-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)129; SRC-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)130; SRC-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)131; SRC-NEXT: movq $0, -{{[0-9]+}}(%rsp)132; SRC-NEXT: movq $1, -{{[0-9]+}}(%rsp)133; SRC-NEXT: movl %edx, %ecx134; SRC-NEXT: shrb $3, %cl135; SRC-NEXT: andb $24, %cl136; SRC-NEXT: negb %cl137; SRC-NEXT: movsbq %cl, %rsi138; SRC-NEXT: movq -24(%rsp,%rsi), %rdi139; SRC-NEXT: movq %rdi, %r8140; SRC-NEXT: movl %edx, %ecx141; SRC-NEXT: shlq %cl, %r8142; SRC-NEXT: notb %cl143; SRC-NEXT: movq -40(%rsp,%rsi), %r9144; SRC-NEXT: movq -32(%rsp,%rsi), %r10145; SRC-NEXT: movq %r10, %r11146; SRC-NEXT: shrq %r11147; SRC-NEXT: shrq %cl, %r11148; SRC-NEXT: orq %r8, %r11149; SRC-NEXT: movq -16(%rsp,%rsi), %rsi150; SRC-NEXT: movl %edx, %ecx151; SRC-NEXT: shldq %cl, %rdi, %rsi152; SRC-NEXT: movq %r9, %rdi153; SRC-NEXT: shlq %cl, %rdi154; SRC-NEXT: shldq %cl, %r9, %r10155; SRC-NEXT: movq %rsi, 24(%rax)156; SRC-NEXT: movq %r10, 8(%rax)157; SRC-NEXT: movq %rdi, (%rax)158; SRC-NEXT: movq %r11, 16(%rax)159; SRC-NEXT: retq160;161; LIN-LABEL: test1:162; LIN: # %bb.0:163; LIN-NEXT: movq %rdi, %rax164; LIN-NEXT: leal (%rsi,%rsi), %edx165; LIN-NEXT: addb $3, %dl166; LIN-NEXT: movl %edx, %ecx167; LIN-NEXT: shrb $3, %cl168; LIN-NEXT: andb $24, %cl169; LIN-NEXT: negb %cl170; LIN-NEXT: movsbq %cl, %rsi171; LIN-NEXT: xorps %xmm0, %xmm0172; LIN-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)173; LIN-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)174; LIN-NEXT: movq $1, -{{[0-9]+}}(%rsp)175; LIN-NEXT: movq $0, -{{[0-9]+}}(%rsp)176; LIN-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)177; LIN-NEXT: movq -40(%rsp,%rsi), %rdi178; LIN-NEXT: movq %rdi, %r8179; LIN-NEXT: movl %edx, %ecx180; LIN-NEXT: shlq %cl, %r8181; LIN-NEXT: movq %r8, (%rax)182; LIN-NEXT: movq -32(%rsp,%rsi), %r8183; LIN-NEXT: movq %r8, %r9184; LIN-NEXT: shldq %cl, %rdi, %r9185; LIN-NEXT: movq %r9, 8(%rax)186; LIN-NEXT: movq -24(%rsp,%rsi), %rdi187; LIN-NEXT: movq %rdi, %r9188; LIN-NEXT: shlq %cl, %r9189; LIN-NEXT: shrq %r8190; LIN-NEXT: notb %cl191; LIN-NEXT: shrq %cl, %r8192; LIN-NEXT: orq %r9, %r8193; LIN-NEXT: movq %r8, 16(%rax)194; LIN-NEXT: movq -16(%rsp,%rsi), %rsi195; LIN-NEXT: movl %edx, %ecx196; LIN-NEXT: shldq %cl, %rdi, %rsi197; LIN-NEXT: movq %rsi, 24(%rax)198; LIN-NEXT: retq199 %b = add i256 %a, 1200 %m = shl i256 %b, 1201 %p = add i256 %m, 1202 %v = lshr i256 %b, %p203 %t = trunc i256 %v to i1204 %c = shl i256 1, %p205 %f = select i1 %t, i256 undef, i256 %c206 ret i256 %f207}208 209define i256 @test2(i256 %a) nounwind {210; ILP-LABEL: test2:211; ILP: # %bb.0:212; ILP-NEXT: movq %rdi, %rax213; ILP-NEXT: xorps %xmm0, %xmm0214; ILP-NEXT: movaps %xmm0, 16(%rdi)215; ILP-NEXT: xorl %edi, %edi216; ILP-NEXT: movq %rsi, %r11217; ILP-NEXT: negq %r11218; ILP-NEXT: movl $0, %r10d219; ILP-NEXT: sbbq %rdx, %r10220; ILP-NEXT: movl $0, %r9d221; ILP-NEXT: sbbq %rcx, %r9222; ILP-NEXT: sbbq %r8, %rdi223; ILP-NEXT: andq %r8, %rdi224; ILP-NEXT: bsrq %rdi, %r8225; ILP-NEXT: andq %rdx, %r10226; ILP-NEXT: bsrq %r10, %rdx227; ILP-NEXT: xorq $63, %r8228; ILP-NEXT: andq %rcx, %r9229; ILP-NEXT: bsrq %r9, %rcx230; ILP-NEXT: xorq $63, %rcx231; ILP-NEXT: orq $64, %rcx232; ILP-NEXT: testq %rdi, %rdi233; ILP-NEXT: cmovneq %r8, %rcx234; ILP-NEXT: xorq $63, %rdx235; ILP-NEXT: andq %rsi, %r11236; ILP-NEXT: movl $127, %esi237; ILP-NEXT: bsrq %r11, %rsi238; ILP-NEXT: xorq $63, %rsi239; ILP-NEXT: addq $64, %rsi240; ILP-NEXT: testq %r10, %r10241; ILP-NEXT: cmovneq %rdx, %rsi242; ILP-NEXT: subq $-128, %rsi243; ILP-NEXT: orq %rdi, %r9244; ILP-NEXT: cmovneq %rcx, %rsi245; ILP-NEXT: movq %rsi, (%rax)246; ILP-NEXT: movq $0, 8(%rax)247; ILP-NEXT: retq248;249; HYBRID-LABEL: test2:250; HYBRID: # %bb.0:251; HYBRID-NEXT: movq %rdi, %rax252; HYBRID-NEXT: xorps %xmm0, %xmm0253; HYBRID-NEXT: movaps %xmm0, 16(%rdi)254; HYBRID-NEXT: xorl %edi, %edi255; HYBRID-NEXT: movq %rsi, %r11256; HYBRID-NEXT: negq %r11257; HYBRID-NEXT: movl $0, %r10d258; HYBRID-NEXT: sbbq %rdx, %r10259; HYBRID-NEXT: movl $0, %r9d260; HYBRID-NEXT: sbbq %rcx, %r9261; HYBRID-NEXT: sbbq %r8, %rdi262; HYBRID-NEXT: andq %r8, %rdi263; HYBRID-NEXT: bsrq %rdi, %r8264; HYBRID-NEXT: xorq $63, %r8265; HYBRID-NEXT: andq %rcx, %r9266; HYBRID-NEXT: bsrq %r9, %rcx267; HYBRID-NEXT: xorq $63, %rcx268; HYBRID-NEXT: orq $64, %rcx269; HYBRID-NEXT: testq %rdi, %rdi270; HYBRID-NEXT: cmovneq %r8, %rcx271; HYBRID-NEXT: andq %rdx, %r10272; HYBRID-NEXT: bsrq %r10, %rdx273; HYBRID-NEXT: xorq $63, %rdx274; HYBRID-NEXT: andq %rsi, %r11275; HYBRID-NEXT: movl $127, %esi276; HYBRID-NEXT: bsrq %r11, %rsi277; HYBRID-NEXT: xorq $63, %rsi278; HYBRID-NEXT: addq $64, %rsi279; HYBRID-NEXT: testq %r10, %r10280; HYBRID-NEXT: cmovneq %rdx, %rsi281; HYBRID-NEXT: subq $-128, %rsi282; HYBRID-NEXT: orq %rdi, %r9283; HYBRID-NEXT: cmovneq %rcx, %rsi284; HYBRID-NEXT: movq %rsi, (%rax)285; HYBRID-NEXT: movq $0, 8(%rax)286; HYBRID-NEXT: retq287;288; BURR-LABEL: test2:289; BURR: # %bb.0:290; BURR-NEXT: movq %rdi, %rax291; BURR-NEXT: xorps %xmm0, %xmm0292; BURR-NEXT: movaps %xmm0, 16(%rdi)293; BURR-NEXT: xorl %edi, %edi294; BURR-NEXT: movq %rsi, %r11295; BURR-NEXT: negq %r11296; BURR-NEXT: movl $0, %r10d297; BURR-NEXT: sbbq %rdx, %r10298; BURR-NEXT: movl $0, %r9d299; BURR-NEXT: sbbq %rcx, %r9300; BURR-NEXT: sbbq %r8, %rdi301; BURR-NEXT: andq %r8, %rdi302; BURR-NEXT: bsrq %rdi, %r8303; BURR-NEXT: xorq $63, %r8304; BURR-NEXT: andq %rcx, %r9305; BURR-NEXT: bsrq %r9, %rcx306; BURR-NEXT: xorq $63, %rcx307; BURR-NEXT: orq $64, %rcx308; BURR-NEXT: testq %rdi, %rdi309; BURR-NEXT: cmovneq %r8, %rcx310; BURR-NEXT: andq %rdx, %r10311; BURR-NEXT: bsrq %r10, %rdx312; BURR-NEXT: xorq $63, %rdx313; BURR-NEXT: andq %rsi, %r11314; BURR-NEXT: movl $127, %esi315; BURR-NEXT: bsrq %r11, %rsi316; BURR-NEXT: xorq $63, %rsi317; BURR-NEXT: addq $64, %rsi318; BURR-NEXT: testq %r10, %r10319; BURR-NEXT: cmovneq %rdx, %rsi320; BURR-NEXT: subq $-128, %rsi321; BURR-NEXT: orq %rdi, %r9322; BURR-NEXT: cmovneq %rcx, %rsi323; BURR-NEXT: movq %rsi, (%rax)324; BURR-NEXT: movq $0, 8(%rax)325; BURR-NEXT: retq326;327; SRC-LABEL: test2:328; SRC: # %bb.0:329; SRC-NEXT: movq %rdi, %rax330; SRC-NEXT: xorl %edi, %edi331; SRC-NEXT: movq %rsi, %r11332; SRC-NEXT: negq %r11333; SRC-NEXT: movl $0, %r10d334; SRC-NEXT: sbbq %rdx, %r10335; SRC-NEXT: movl $0, %r9d336; SRC-NEXT: sbbq %rcx, %r9337; SRC-NEXT: sbbq %r8, %rdi338; SRC-NEXT: andq %rdx, %r10339; SRC-NEXT: andq %rcx, %r9340; SRC-NEXT: andq %r8, %rdi341; SRC-NEXT: andq %rsi, %r11342; SRC-NEXT: bsrq %rdi, %rcx343; SRC-NEXT: xorq $63, %rcx344; SRC-NEXT: bsrq %r9, %rdx345; SRC-NEXT: xorq $63, %rdx346; SRC-NEXT: orq $64, %rdx347; SRC-NEXT: testq %rdi, %rdi348; SRC-NEXT: cmovneq %rcx, %rdx349; SRC-NEXT: bsrq %r10, %rcx350; SRC-NEXT: xorq $63, %rcx351; SRC-NEXT: movl $127, %esi352; SRC-NEXT: bsrq %r11, %rsi353; SRC-NEXT: xorq $63, %rsi354; SRC-NEXT: addq $64, %rsi355; SRC-NEXT: testq %r10, %r10356; SRC-NEXT: cmovneq %rcx, %rsi357; SRC-NEXT: subq $-128, %rsi358; SRC-NEXT: orq %r9, %rdi359; SRC-NEXT: cmovneq %rdx, %rsi360; SRC-NEXT: xorps %xmm0, %xmm0361; SRC-NEXT: movaps %xmm0, 16(%rax)362; SRC-NEXT: movq %rsi, (%rax)363; SRC-NEXT: movq $0, 8(%rax)364; SRC-NEXT: retq365;366; LIN-LABEL: test2:367; LIN: # %bb.0:368; LIN-NEXT: movq %rdi, %rax369; LIN-NEXT: xorps %xmm0, %xmm0370; LIN-NEXT: movaps %xmm0, 16(%rdi)371; LIN-NEXT: movl $127, %edi372; LIN-NEXT: movq %rsi, %r9373; LIN-NEXT: negq %r9374; LIN-NEXT: andq %rsi, %r9375; LIN-NEXT: bsrq %r9, %rdi376; LIN-NEXT: xorq $63, %rdi377; LIN-NEXT: addq $64, %rdi378; LIN-NEXT: xorl %esi, %esi379; LIN-NEXT: movl $0, %r9d380; LIN-NEXT: sbbq %rdx, %r9381; LIN-NEXT: andq %rdx, %r9382; LIN-NEXT: bsrq %r9, %rdx383; LIN-NEXT: xorq $63, %rdx384; LIN-NEXT: testq %r9, %r9385; LIN-NEXT: cmoveq %rdi, %rdx386; LIN-NEXT: subq $-128, %rdx387; LIN-NEXT: movl $0, %edi388; LIN-NEXT: sbbq %rcx, %rdi389; LIN-NEXT: andq %rcx, %rdi390; LIN-NEXT: bsrq %rdi, %rcx391; LIN-NEXT: xorq $63, %rcx392; LIN-NEXT: orq $64, %rcx393; LIN-NEXT: sbbq %r8, %rsi394; LIN-NEXT: andq %r8, %rsi395; LIN-NEXT: bsrq %rsi, %r8396; LIN-NEXT: xorq $63, %r8397; LIN-NEXT: testq %rsi, %rsi398; LIN-NEXT: cmoveq %rcx, %r8399; LIN-NEXT: orq %rdi, %rsi400; LIN-NEXT: cmoveq %rdx, %r8401; LIN-NEXT: movq %r8, (%rax)402; LIN-NEXT: movq $0, 8(%rax)403; LIN-NEXT: retq404 %b = sub i256 0, %a405 %c = and i256 %b, %a406 %d = call i256 @llvm.ctlz.i256(i256 %c, i1 false)407 ret i256 %d408}409 410define i256 @test3(i256 %n) nounwind {411; ILP-LABEL: test3:412; ILP: # %bb.0:413; ILP-NEXT: movq %rdi, %rax414; ILP-NEXT: xorps %xmm0, %xmm0415; ILP-NEXT: movaps %xmm0, 16(%rdi)416; ILP-NEXT: xorl %r9d, %r9d417; ILP-NEXT: movq %rsi, %rdi418; ILP-NEXT: negq %rdi419; ILP-NEXT: movl $0, %r10d420; ILP-NEXT: sbbq %rdx, %r10421; ILP-NEXT: movl $0, %r11d422; ILP-NEXT: sbbq %rcx, %r11423; ILP-NEXT: sbbq %r8, %r9424; ILP-NEXT: notq %r8425; ILP-NEXT: andq %r9, %r8426; ILP-NEXT: bsrq %r8, %r9427; ILP-NEXT: notq %rdx428; ILP-NEXT: andq %r10, %rdx429; ILP-NEXT: bsrq %rdx, %r10430; ILP-NEXT: xorq $63, %r9431; ILP-NEXT: notq %rcx432; ILP-NEXT: andq %r11, %rcx433; ILP-NEXT: bsrq %rcx, %r11434; ILP-NEXT: xorq $63, %r11435; ILP-NEXT: orq $64, %r11436; ILP-NEXT: testq %r8, %r8437; ILP-NEXT: cmovneq %r9, %r11438; ILP-NEXT: xorq $63, %r10439; ILP-NEXT: notq %rsi440; ILP-NEXT: andq %rdi, %rsi441; ILP-NEXT: movl $127, %edi442; ILP-NEXT: bsrq %rsi, %rdi443; ILP-NEXT: xorq $63, %rdi444; ILP-NEXT: addq $64, %rdi445; ILP-NEXT: testq %rdx, %rdx446; ILP-NEXT: cmovneq %r10, %rdi447; ILP-NEXT: subq $-128, %rdi448; ILP-NEXT: orq %r8, %rcx449; ILP-NEXT: cmovneq %r11, %rdi450; ILP-NEXT: movq %rdi, (%rax)451; ILP-NEXT: movq $0, 8(%rax)452; ILP-NEXT: retq453;454; HYBRID-LABEL: test3:455; HYBRID: # %bb.0:456; HYBRID-NEXT: pushq %rbx457; HYBRID-NEXT: movq %rdi, %rax458; HYBRID-NEXT: xorps %xmm0, %xmm0459; HYBRID-NEXT: movaps %xmm0, 16(%rdi)460; HYBRID-NEXT: xorl %r9d, %r9d461; HYBRID-NEXT: movq %rsi, %rdi462; HYBRID-NEXT: negq %rdi463; HYBRID-NEXT: movl $0, %r10d464; HYBRID-NEXT: sbbq %rdx, %r10465; HYBRID-NEXT: movl $0, %r11d466; HYBRID-NEXT: sbbq %rcx, %r11467; HYBRID-NEXT: sbbq %r8, %r9468; HYBRID-NEXT: notq %r8469; HYBRID-NEXT: andq %r9, %r8470; HYBRID-NEXT: bsrq %r8, %rbx471; HYBRID-NEXT: xorq $63, %rbx472; HYBRID-NEXT: notq %rcx473; HYBRID-NEXT: andq %r11, %rcx474; HYBRID-NEXT: bsrq %rcx, %r9475; HYBRID-NEXT: xorq $63, %r9476; HYBRID-NEXT: orq $64, %r9477; HYBRID-NEXT: testq %r8, %r8478; HYBRID-NEXT: cmovneq %rbx, %r9479; HYBRID-NEXT: notq %rdx480; HYBRID-NEXT: andq %r10, %rdx481; HYBRID-NEXT: bsrq %rdx, %r10482; HYBRID-NEXT: xorq $63, %r10483; HYBRID-NEXT: notq %rsi484; HYBRID-NEXT: andq %rdi, %rsi485; HYBRID-NEXT: movl $127, %edi486; HYBRID-NEXT: bsrq %rsi, %rdi487; HYBRID-NEXT: xorq $63, %rdi488; HYBRID-NEXT: addq $64, %rdi489; HYBRID-NEXT: testq %rdx, %rdx490; HYBRID-NEXT: cmovneq %r10, %rdi491; HYBRID-NEXT: subq $-128, %rdi492; HYBRID-NEXT: orq %r8, %rcx493; HYBRID-NEXT: cmovneq %r9, %rdi494; HYBRID-NEXT: movq %rdi, (%rax)495; HYBRID-NEXT: movq $0, 8(%rax)496; HYBRID-NEXT: popq %rbx497; HYBRID-NEXT: retq498;499; BURR-LABEL: test3:500; BURR: # %bb.0:501; BURR-NEXT: pushq %rbx502; BURR-NEXT: movq %rdi, %rax503; BURR-NEXT: xorps %xmm0, %xmm0504; BURR-NEXT: movaps %xmm0, 16(%rdi)505; BURR-NEXT: xorl %r9d, %r9d506; BURR-NEXT: movq %rsi, %rdi507; BURR-NEXT: negq %rdi508; BURR-NEXT: movl $0, %r10d509; BURR-NEXT: sbbq %rdx, %r10510; BURR-NEXT: movl $0, %r11d511; BURR-NEXT: sbbq %rcx, %r11512; BURR-NEXT: sbbq %r8, %r9513; BURR-NEXT: notq %r8514; BURR-NEXT: andq %r9, %r8515; BURR-NEXT: bsrq %r8, %rbx516; BURR-NEXT: xorq $63, %rbx517; BURR-NEXT: notq %rcx518; BURR-NEXT: andq %r11, %rcx519; BURR-NEXT: bsrq %rcx, %r9520; BURR-NEXT: xorq $63, %r9521; BURR-NEXT: orq $64, %r9522; BURR-NEXT: testq %r8, %r8523; BURR-NEXT: cmovneq %rbx, %r9524; BURR-NEXT: notq %rdx525; BURR-NEXT: andq %r10, %rdx526; BURR-NEXT: bsrq %rdx, %r10527; BURR-NEXT: xorq $63, %r10528; BURR-NEXT: notq %rsi529; BURR-NEXT: andq %rdi, %rsi530; BURR-NEXT: movl $127, %edi531; BURR-NEXT: bsrq %rsi, %rdi532; BURR-NEXT: xorq $63, %rdi533; BURR-NEXT: addq $64, %rdi534; BURR-NEXT: testq %rdx, %rdx535; BURR-NEXT: cmovneq %r10, %rdi536; BURR-NEXT: subq $-128, %rdi537; BURR-NEXT: orq %r8, %rcx538; BURR-NEXT: cmovneq %r9, %rdi539; BURR-NEXT: movq %rdi, (%rax)540; BURR-NEXT: movq $0, 8(%rax)541; BURR-NEXT: popq %rbx542; BURR-NEXT: retq543;544; SRC-LABEL: test3:545; SRC: # %bb.0:546; SRC-NEXT: movq %rdi, %rax547; SRC-NEXT: movq %rsi, %rdi548; SRC-NEXT: notq %rdi549; SRC-NEXT: xorl %r9d, %r9d550; SRC-NEXT: negq %rsi551; SRC-NEXT: movl $0, %r10d552; SRC-NEXT: sbbq %rdx, %r10553; SRC-NEXT: notq %rdx554; SRC-NEXT: movl $0, %r11d555; SRC-NEXT: sbbq %rcx, %r11556; SRC-NEXT: notq %rcx557; SRC-NEXT: sbbq %r8, %r9558; SRC-NEXT: notq %r8559; SRC-NEXT: andq %r10, %rdx560; SRC-NEXT: andq %r11, %rcx561; SRC-NEXT: andq %r9, %r8562; SRC-NEXT: andq %rdi, %rsi563; SRC-NEXT: bsrq %r8, %rdi564; SRC-NEXT: xorq $63, %rdi565; SRC-NEXT: bsrq %rcx, %r9566; SRC-NEXT: xorq $63, %r9567; SRC-NEXT: orq $64, %r9568; SRC-NEXT: testq %r8, %r8569; SRC-NEXT: cmovneq %rdi, %r9570; SRC-NEXT: bsrq %rdx, %rdi571; SRC-NEXT: xorq $63, %rdi572; SRC-NEXT: movl $127, %r10d573; SRC-NEXT: bsrq %rsi, %r10574; SRC-NEXT: xorq $63, %r10575; SRC-NEXT: addq $64, %r10576; SRC-NEXT: testq %rdx, %rdx577; SRC-NEXT: cmovneq %rdi, %r10578; SRC-NEXT: subq $-128, %r10579; SRC-NEXT: orq %rcx, %r8580; SRC-NEXT: cmovneq %r9, %r10581; SRC-NEXT: xorps %xmm0, %xmm0582; SRC-NEXT: movaps %xmm0, 16(%rax)583; SRC-NEXT: movq %r10, (%rax)584; SRC-NEXT: movq $0, 8(%rax)585; SRC-NEXT: retq586;587; LIN-LABEL: test3:588; LIN: # %bb.0:589; LIN-NEXT: movq %rdi, %rax590; LIN-NEXT: xorps %xmm0, %xmm0591; LIN-NEXT: movaps %xmm0, 16(%rdi)592; LIN-NEXT: movl $127, %r9d593; LIN-NEXT: movq %rsi, %rdi594; LIN-NEXT: negq %rdi595; LIN-NEXT: notq %rsi596; LIN-NEXT: andq %rdi, %rsi597; LIN-NEXT: bsrq %rsi, %r9598; LIN-NEXT: xorq $63, %r9599; LIN-NEXT: addq $64, %r9600; LIN-NEXT: xorl %edi, %edi601; LIN-NEXT: movl $0, %esi602; LIN-NEXT: sbbq %rdx, %rsi603; LIN-NEXT: notq %rdx604; LIN-NEXT: andq %rsi, %rdx605; LIN-NEXT: bsrq %rdx, %rsi606; LIN-NEXT: xorq $63, %rsi607; LIN-NEXT: testq %rdx, %rdx608; LIN-NEXT: cmoveq %r9, %rsi609; LIN-NEXT: subq $-128, %rsi610; LIN-NEXT: movl $0, %edx611; LIN-NEXT: sbbq %rcx, %rdx612; LIN-NEXT: notq %rcx613; LIN-NEXT: andq %rdx, %rcx614; LIN-NEXT: bsrq %rcx, %rdx615; LIN-NEXT: xorq $63, %rdx616; LIN-NEXT: orq $64, %rdx617; LIN-NEXT: sbbq %r8, %rdi618; LIN-NEXT: notq %r8619; LIN-NEXT: andq %rdi, %r8620; LIN-NEXT: bsrq %r8, %rdi621; LIN-NEXT: xorq $63, %rdi622; LIN-NEXT: testq %r8, %r8623; LIN-NEXT: cmoveq %rdx, %rdi624; LIN-NEXT: orq %rcx, %r8625; LIN-NEXT: cmoveq %rsi, %rdi626; LIN-NEXT: movq %rdi, (%rax)627; LIN-NEXT: movq $0, 8(%rax)628; LIN-NEXT: retq629 %m = sub i256 -1, %n630 %x = sub i256 0, %n631 %y = and i256 %x, %m632 %z = call i256 @llvm.ctlz.i256(i256 %y, i1 false)633 ret i256 %z634}635 636declare i256 @llvm.ctlz.i256(i256, i1) nounwind readnone637 638define i64 @test4(i64 %a, i64 %b) nounwind {639; ILP-LABEL: test4:640; ILP: # %bb.0:641; ILP-NEXT: xorl %eax, %eax642; ILP-NEXT: xorl %ecx, %ecx643; ILP-NEXT: incq %rsi644; ILP-NEXT: sete %cl645; ILP-NEXT: cmpq %rdi, %rsi646; ILP-NEXT: sbbq $0, %rcx647; ILP-NEXT: movl $0, %ecx648; ILP-NEXT: sbbq %rcx, %rcx649; ILP-NEXT: movl $0, %ecx650; ILP-NEXT: sbbq %rcx, %rcx651; ILP-NEXT: adcq $1, %rax652; ILP-NEXT: retq653;654; HYBRID-LABEL: test4:655; HYBRID: # %bb.0:656; HYBRID-NEXT: xorl %eax, %eax657; HYBRID-NEXT: xorl %ecx, %ecx658; HYBRID-NEXT: incq %rsi659; HYBRID-NEXT: sete %cl660; HYBRID-NEXT: cmpq %rdi, %rsi661; HYBRID-NEXT: sbbq $0, %rcx662; HYBRID-NEXT: movl $0, %ecx663; HYBRID-NEXT: sbbq %rcx, %rcx664; HYBRID-NEXT: movl $0, %ecx665; HYBRID-NEXT: sbbq %rcx, %rcx666; HYBRID-NEXT: adcq $1, %rax667; HYBRID-NEXT: retq668;669; BURR-LABEL: test4:670; BURR: # %bb.0:671; BURR-NEXT: xorl %eax, %eax672; BURR-NEXT: xorl %ecx, %ecx673; BURR-NEXT: incq %rsi674; BURR-NEXT: sete %cl675; BURR-NEXT: cmpq %rdi, %rsi676; BURR-NEXT: sbbq $0, %rcx677; BURR-NEXT: movl $0, %ecx678; BURR-NEXT: sbbq %rcx, %rcx679; BURR-NEXT: movl $0, %ecx680; BURR-NEXT: sbbq %rcx, %rcx681; BURR-NEXT: adcq $1, %rax682; BURR-NEXT: retq683;684; SRC-LABEL: test4:685; SRC: # %bb.0:686; SRC-NEXT: xorl %ecx, %ecx687; SRC-NEXT: incq %rsi688; SRC-NEXT: sete %cl689; SRC-NEXT: xorl %eax, %eax690; SRC-NEXT: cmpq %rdi, %rsi691; SRC-NEXT: sbbq $0, %rcx692; SRC-NEXT: movl $0, %ecx693; SRC-NEXT: sbbq %rcx, %rcx694; SRC-NEXT: movl $0, %ecx695; SRC-NEXT: sbbq %rcx, %rcx696; SRC-NEXT: adcq $1, %rax697; SRC-NEXT: retq698;699; LIN-LABEL: test4:700; LIN: # %bb.0:701; LIN-NEXT: xorl %eax, %eax702; LIN-NEXT: xorl %ecx, %ecx703; LIN-NEXT: incq %rsi704; LIN-NEXT: sete %cl705; LIN-NEXT: cmpq %rdi, %rsi706; LIN-NEXT: sbbq $0, %rcx707; LIN-NEXT: movl $0, %ecx708; LIN-NEXT: sbbq %rcx, %rcx709; LIN-NEXT: movl $0, %ecx710; LIN-NEXT: sbbq %rcx, %rcx711; LIN-NEXT: adcq $1, %rax712; LIN-NEXT: retq713 %r = zext i64 %b to i256714 %u = add i256 %r, 1715 %w = and i256 %u, 1461501637330902918203684832716283019655932542975716 %x = zext i64 %a to i256717 %c = icmp uge i256 %w, %x718 %y = select i1 %c, i64 0, i64 1719 %z = add i64 %y, 1720 ret i64 %z721}722 723define i256 @PR25498(i256 %a) nounwind {724; ILP-LABEL: PR25498:725; ILP: # %bb.0:726; ILP-NEXT: pushq %rbx727; ILP-NEXT: movq %rdi, %rax728; ILP-NEXT: xorl %edi, %edi729; ILP-NEXT: movq %rsi, %rbx730; ILP-NEXT: negq %rbx731; ILP-NEXT: movl $0, %r11d732; ILP-NEXT: sbbq %rdx, %r11733; ILP-NEXT: movl $0, %r9d734; ILP-NEXT: sbbq %rcx, %r9735; ILP-NEXT: movl $0, %r10d736; ILP-NEXT: sbbq %r8, %r10737; ILP-NEXT: orq %r8, %rdx738; ILP-NEXT: orq %rcx, %rsi739; ILP-NEXT: orq %rdx, %rsi740; ILP-NEXT: je .LBB4_1741; ILP-NEXT: # %bb.2: # %cond.false742; ILP-NEXT: bsrq %r11, %rdx743; ILP-NEXT: bsrq %r10, %rcx744; ILP-NEXT: xorq $63, %rcx745; ILP-NEXT: bsrq %r9, %rsi746; ILP-NEXT: xorq $63, %rsi747; ILP-NEXT: orq $64, %rsi748; ILP-NEXT: testq %r10, %r10749; ILP-NEXT: cmovneq %rcx, %rsi750; ILP-NEXT: xorq $63, %rdx751; ILP-NEXT: bsrq %rbx, %rcx752; ILP-NEXT: xorq $63, %rcx753; ILP-NEXT: orq $64, %rcx754; ILP-NEXT: testq %r11, %r11755; ILP-NEXT: cmovneq %rdx, %rcx756; ILP-NEXT: orq $128, %rcx757; ILP-NEXT: xorl %edi, %edi758; ILP-NEXT: orq %r10, %r9759; ILP-NEXT: cmovneq %rsi, %rcx760; ILP-NEXT: jmp .LBB4_3761; ILP-NEXT: .LBB4_1:762; ILP-NEXT: movl $256, %ecx # imm = 0x100763; ILP-NEXT: .LBB4_3: # %cond.end764; ILP-NEXT: movq %rcx, (%rax)765; ILP-NEXT: movq %rdi, 8(%rax)766; ILP-NEXT: movq %rdi, 16(%rax)767; ILP-NEXT: movq %rdi, 24(%rax)768; ILP-NEXT: popq %rbx769; ILP-NEXT: retq770;771; HYBRID-LABEL: PR25498:772; HYBRID: # %bb.0:773; HYBRID-NEXT: pushq %rbx774; HYBRID-NEXT: movq %rdi, %rax775; HYBRID-NEXT: xorl %edi, %edi776; HYBRID-NEXT: movq %rsi, %rbx777; HYBRID-NEXT: negq %rbx778; HYBRID-NEXT: movl $0, %r11d779; HYBRID-NEXT: sbbq %rdx, %r11780; HYBRID-NEXT: movl $0, %r9d781; HYBRID-NEXT: sbbq %rcx, %r9782; HYBRID-NEXT: movl $0, %r10d783; HYBRID-NEXT: sbbq %r8, %r10784; HYBRID-NEXT: orq %r8, %rdx785; HYBRID-NEXT: orq %rcx, %rsi786; HYBRID-NEXT: orq %rdx, %rsi787; HYBRID-NEXT: je .LBB4_1788; HYBRID-NEXT: # %bb.2: # %cond.false789; HYBRID-NEXT: bsrq %r10, %rcx790; HYBRID-NEXT: xorq $63, %rcx791; HYBRID-NEXT: bsrq %r9, %rdx792; HYBRID-NEXT: xorq $63, %rdx793; HYBRID-NEXT: orq $64, %rdx794; HYBRID-NEXT: testq %r10, %r10795; HYBRID-NEXT: cmovneq %rcx, %rdx796; HYBRID-NEXT: bsrq %r11, %rsi797; HYBRID-NEXT: xorq $63, %rsi798; HYBRID-NEXT: bsrq %rbx, %rcx799; HYBRID-NEXT: xorq $63, %rcx800; HYBRID-NEXT: orq $64, %rcx801; HYBRID-NEXT: testq %r11, %r11802; HYBRID-NEXT: cmovneq %rsi, %rcx803; HYBRID-NEXT: orq $128, %rcx804; HYBRID-NEXT: orq %r10, %r9805; HYBRID-NEXT: cmovneq %rdx, %rcx806; HYBRID-NEXT: xorl %edi, %edi807; HYBRID-NEXT: jmp .LBB4_3808; HYBRID-NEXT: .LBB4_1:809; HYBRID-NEXT: movl $256, %ecx # imm = 0x100810; HYBRID-NEXT: .LBB4_3: # %cond.end811; HYBRID-NEXT: movq %rcx, (%rax)812; HYBRID-NEXT: movq %rdi, 8(%rax)813; HYBRID-NEXT: movq %rdi, 16(%rax)814; HYBRID-NEXT: movq %rdi, 24(%rax)815; HYBRID-NEXT: popq %rbx816; HYBRID-NEXT: retq817;818; BURR-LABEL: PR25498:819; BURR: # %bb.0:820; BURR-NEXT: pushq %rbx821; BURR-NEXT: movq %rdi, %rax822; BURR-NEXT: xorl %edi, %edi823; BURR-NEXT: movq %rsi, %rbx824; BURR-NEXT: negq %rbx825; BURR-NEXT: movl $0, %r11d826; BURR-NEXT: sbbq %rdx, %r11827; BURR-NEXT: movl $0, %r9d828; BURR-NEXT: sbbq %rcx, %r9829; BURR-NEXT: movl $0, %r10d830; BURR-NEXT: sbbq %r8, %r10831; BURR-NEXT: orq %r8, %rdx832; BURR-NEXT: orq %rcx, %rsi833; BURR-NEXT: orq %rdx, %rsi834; BURR-NEXT: je .LBB4_1835; BURR-NEXT: # %bb.2: # %cond.false836; BURR-NEXT: bsrq %r10, %rcx837; BURR-NEXT: xorq $63, %rcx838; BURR-NEXT: bsrq %r9, %rdx839; BURR-NEXT: xorq $63, %rdx840; BURR-NEXT: orq $64, %rdx841; BURR-NEXT: testq %r10, %r10842; BURR-NEXT: cmovneq %rcx, %rdx843; BURR-NEXT: bsrq %r11, %rsi844; BURR-NEXT: xorq $63, %rsi845; BURR-NEXT: bsrq %rbx, %rcx846; BURR-NEXT: xorq $63, %rcx847; BURR-NEXT: orq $64, %rcx848; BURR-NEXT: testq %r11, %r11849; BURR-NEXT: cmovneq %rsi, %rcx850; BURR-NEXT: orq $128, %rcx851; BURR-NEXT: orq %r10, %r9852; BURR-NEXT: cmovneq %rdx, %rcx853; BURR-NEXT: xorl %edi, %edi854; BURR-NEXT: jmp .LBB4_3855; BURR-NEXT: .LBB4_1:856; BURR-NEXT: movl $256, %ecx # imm = 0x100857; BURR-NEXT: .LBB4_3: # %cond.end858; BURR-NEXT: movq %rcx, (%rax)859; BURR-NEXT: movq %rdi, 8(%rax)860; BURR-NEXT: movq %rdi, 16(%rax)861; BURR-NEXT: movq %rdi, 24(%rax)862; BURR-NEXT: popq %rbx863; BURR-NEXT: retq864;865; SRC-LABEL: PR25498:866; SRC: # %bb.0:867; SRC-NEXT: pushq %rbx868; SRC-NEXT: movq %rdi, %rax869; SRC-NEXT: xorl %edi, %edi870; SRC-NEXT: movq %rsi, %rbx871; SRC-NEXT: negq %rbx872; SRC-NEXT: movl $0, %r11d873; SRC-NEXT: sbbq %rdx, %r11874; SRC-NEXT: movl $0, %r9d875; SRC-NEXT: sbbq %rcx, %r9876; SRC-NEXT: movl $0, %r10d877; SRC-NEXT: sbbq %r8, %r10878; SRC-NEXT: orq %r8, %rdx879; SRC-NEXT: orq %rcx, %rsi880; SRC-NEXT: orq %rdx, %rsi881; SRC-NEXT: je .LBB4_1882; SRC-NEXT: # %bb.2: # %cond.false883; SRC-NEXT: bsrq %r10, %rcx884; SRC-NEXT: xorq $63, %rcx885; SRC-NEXT: bsrq %r9, %rdx886; SRC-NEXT: xorq $63, %rdx887; SRC-NEXT: orq $64, %rdx888; SRC-NEXT: testq %r10, %r10889; SRC-NEXT: cmovneq %rcx, %rdx890; SRC-NEXT: bsrq %r11, %rsi891; SRC-NEXT: xorq $63, %rsi892; SRC-NEXT: bsrq %rbx, %rcx893; SRC-NEXT: xorq $63, %rcx894; SRC-NEXT: orq $64, %rcx895; SRC-NEXT: testq %r11, %r11896; SRC-NEXT: cmovneq %rsi, %rcx897; SRC-NEXT: orq $128, %rcx898; SRC-NEXT: orq %r10, %r9899; SRC-NEXT: cmovneq %rdx, %rcx900; SRC-NEXT: xorl %edi, %edi901; SRC-NEXT: jmp .LBB4_3902; SRC-NEXT: .LBB4_1:903; SRC-NEXT: movl $256, %ecx # imm = 0x100904; SRC-NEXT: .LBB4_3: # %cond.end905; SRC-NEXT: movq %rcx, (%rax)906; SRC-NEXT: movq %rdi, 8(%rax)907; SRC-NEXT: movq %rdi, 16(%rax)908; SRC-NEXT: movq %rdi, 24(%rax)909; SRC-NEXT: popq %rbx910; SRC-NEXT: retq911;912; LIN-LABEL: PR25498:913; LIN: # %bb.0:914; LIN-NEXT: pushq %rbx915; LIN-NEXT: movq %rdi, %rax916; LIN-NEXT: movq %rsi, %rbx917; LIN-NEXT: negq %rbx918; LIN-NEXT: xorl %edi, %edi919; LIN-NEXT: movl $0, %r11d920; LIN-NEXT: sbbq %rdx, %r11921; LIN-NEXT: movl $0, %r9d922; LIN-NEXT: sbbq %rcx, %r9923; LIN-NEXT: movl $0, %r10d924; LIN-NEXT: sbbq %r8, %r10925; LIN-NEXT: orq %rcx, %rsi926; LIN-NEXT: orq %r8, %rdx927; LIN-NEXT: orq %rsi, %rdx928; LIN-NEXT: je .LBB4_1929; LIN-NEXT: # %bb.2: # %cond.false930; LIN-NEXT: bsrq %rbx, %rcx931; LIN-NEXT: xorq $63, %rcx932; LIN-NEXT: orq $64, %rcx933; LIN-NEXT: bsrq %r11, %rdx934; LIN-NEXT: xorq $63, %rdx935; LIN-NEXT: testq %r11, %r11936; LIN-NEXT: cmoveq %rcx, %rdx937; LIN-NEXT: orq $128, %rdx938; LIN-NEXT: bsrq %r9, %rsi939; LIN-NEXT: xorq $63, %rsi940; LIN-NEXT: orq $64, %rsi941; LIN-NEXT: bsrq %r10, %rcx942; LIN-NEXT: xorq $63, %rcx943; LIN-NEXT: testq %r10, %r10944; LIN-NEXT: cmoveq %rsi, %rcx945; LIN-NEXT: orq %r10, %r9946; LIN-NEXT: cmoveq %rdx, %rcx947; LIN-NEXT: xorl %edi, %edi948; LIN-NEXT: jmp .LBB4_3949; LIN-NEXT: .LBB4_1:950; LIN-NEXT: movl $256, %ecx # imm = 0x100951; LIN-NEXT: .LBB4_3: # %cond.end952; LIN-NEXT: movq %rcx, (%rax)953; LIN-NEXT: movq %rdi, 8(%rax)954; LIN-NEXT: movq %rdi, 16(%rax)955; LIN-NEXT: movq %rdi, 24(%rax)956; LIN-NEXT: popq %rbx957; LIN-NEXT: retq958 %b = sub i256 0, %a959 %cmpz = icmp eq i256 %b, 0960 br i1 %cmpz, label %cond.end, label %cond.false961 962cond.false:963 %d = call i256 @llvm.ctlz.i256(i256 %b, i1 true)964 br label %cond.end965 966cond.end:967 %ctz = phi i256 [ 256, %0 ], [ %d, %cond.false ]968 ret i256 %ctz969}970 971