brintos

brintos / llvm-project-archived public Read only

0
0
Text · 29.0 KiB · 426587a Raw
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