brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.4 KiB · 054485a Raw
136 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc %s -x86-early-ifcvt -pass-remarks='early-ifcvt' -pass-remarks-missed='early-ifcvt' -mcpu=k8 -o - 2>&1 | FileCheck %s3target triple = "x86_64-none-none"4 5; CHECK: remark: <unknown>:0:0: performing if-conversion on branch:6; CHECK-SAME: the condition adds {{[0-9]+}} cycle{{s?}} to the critical path,7; CHECK-SAME: and the short leg adds another {{[0-9]+}} cycles{{s?}},8; CHECK-SAME: and the long leg adds another {{[0-9]+}} cycles{{s?}},9; CHECK-SAME: each staying under the threshold of {{[0-9]+}} cycles{{s?}}.10 11; CHECK: remark: <unknown>:0:0: did not if-convert branch:12; CHECK-SAME: the condition would add {{[0-9]+}} cycles{{s?}} to the critical path,13; CHECK-SAME: and the short leg would add another {{[0-9]+}} cycles{{s?}},14; CHECK-SAME: and the long leg would add another {{[0-9]+}} cycles{{s?}} exceeding the limit of {{[0-9]+}} cycles{{s?}}.15 16; CHECK: remark: <unknown>:0:0: did not if-convert branch:17; CHECK-SAME: the resulting critical path ({{[0-9]+}} cycles{{s?}})18; CHECK-SAME: would extend the shorter leg's critical path ({{[0-9]+}} cycle{{s?}})19; CHECK-SAME: by more than the threshold of {{[0-9]+}} cycles{{s?}},20; CHECK-SAME: which cannot be hidden by available ILP.21 22define i32 @mm1(i1 %pred, i32 %val) {23; CHECK-LABEL: mm1:24; CHECK:       # %bb.0: # %entry25; CHECK-NEXT:    # kill: def $esi killed $esi def $rsi26; CHECK-NEXT:    leal 1(%rsi), %eax27; CHECK-NEXT:    testb $1, %dil28; CHECK-NEXT:    cmovel %esi, %eax29; CHECK-NEXT:    retq30entry:31  br i1 %pred, label %if.true, label %if.else32 33if.true:34  %v1 = add i32 1, %val35  br label %if.else36 37if.else:38  %res = phi i32 [ %val, %entry ], [ %v1, %if.true ]39  ret i32 %res40}41 42define i32 @mm2(i1 %pred, i32 %val, i32 %e1, i32 %e2, i32 %e3, i32 %e4, i32 %e5) {43; CHECK-LABEL: mm2:44; CHECK:       # %bb.0: # %entry45; CHECK-NEXT:    movl %esi, %eax46; CHECK-NEXT:    testb $1, %dil47; CHECK-NEXT:    je .LBB1_248; CHECK-NEXT:  # %bb.1: # %if.true49; CHECK-NEXT:    addl %eax, %edx50; CHECK-NEXT:    addl %ecx, %r8d51; CHECK-NEXT:    addl %edx, %r8d52; CHECK-NEXT:    addl %r8d, %r9d53; CHECK-NEXT:    movl %r9d, %eax54; CHECK-NEXT:  .LBB1_2: # %if.else55; CHECK-NEXT:    retq56entry:57  br i1 %pred, label %if.true, label %if.else58 59if.true:60  %v1 = add i32 %e1, %val61  %v2 = add i32 %e2, %v162  %v3 = add i32 %e3, %v263  %v4 = add i32 %e4, %v364  br label %if.else65 66if.else:67  %res = phi i32 [ %val, %entry ], [ %v4, %if.true ]68  ret i32 %res69}70 71define i64 @mm3(i1 %pred, i64 %val, i64 %e1, i128 %e2, i128 %e3, i128 %e4, i128 %e5) {72; CHECK-LABEL: mm3:73; CHECK:       # %bb.0: # %entry74; CHECK-NEXT:    movq %rsi, %rax75; CHECK-NEXT:    testb $1, %dil76; CHECK-NEXT:    movq %rsi, %r1077; CHECK-NEXT:    jne .LBB2_278; CHECK-NEXT:  # %bb.1: # %if.false79; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rsi80; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rdi81; CHECK-NEXT:    imulq %rdx, %rdx82; CHECK-NEXT:    movq %rdx, %r1083; CHECK-NEXT:    sarq $63, %r1084; CHECK-NEXT:    movq %rcx, %rax85; CHECK-NEXT:    movq %rdx, %r986; CHECK-NEXT:    mulq %rdx87; CHECK-NEXT:    imulq %rcx, %r1088; CHECK-NEXT:    imulq %r9, %r889; CHECK-NEXT:    addq %rdx, %r890; CHECK-NEXT:    addq %r10, %r891; CHECK-NEXT:    addq {{[0-9]+}}(%rsp), %rax92; CHECK-NEXT:    adcq {{[0-9]+}}(%rsp), %r893; CHECK-NEXT:    xorq {{[0-9]+}}(%rsp), %rdi94; CHECK-NEXT:    xorq %r8, %rdi95; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %r1096; CHECK-NEXT:    xorq %rsi, %r1097; CHECK-NEXT:    xorq %rax, %r1098; CHECK-NEXT:    movq %rdi, %rax99; CHECK-NEXT:    movl %esi, %ecx100; CHECK-NEXT:    sarq %cl, %rax101; CHECK-NEXT:    addq %rdi, %rdi102; CHECK-NEXT:    notb %cl103; CHECK-NEXT:    shlq %cl, %rdi104; CHECK-NEXT:    movl %esi, %ecx105; CHECK-NEXT:    shrq %cl, %r10106; CHECK-NEXT:    orq %rdi, %r10107; CHECK-NEXT:    testb $64, %sil108; CHECK-NEXT:    cmovneq %rax, %r10109; CHECK-NEXT:    movq %r9, %rax110; CHECK-NEXT:  .LBB2_2: # %if.endif111; CHECK-NEXT:    addq %r10, %rax112; CHECK-NEXT:    retq113entry:114  br i1 %pred, label %if.true, label %if.false115 116if.true:117  br label %if.endif118 119if.false:120  %f1 = mul i64 %e1, %e1121  %f3 = sext i64 %f1 to i128122  %f4 = mul i128 %e2, %f3123  %f6 = add i128 %e3, %f4124  %f7 = xor i128 %e4, %f6125  %f8 = xor i128 %e5, %f7126  %a1 = ashr i128 %f8, %e5127  %f5 = trunc i128 %a1 to i64128  br label %if.endif129 130if.endif:131  %r1 = phi i64 [ %val, %if.true ], [ %f1, %if.false ]132  %r2 = phi i64 [ %val, %if.true ], [ %f5, %if.false ]133  %res = add i64 %r1, %r2134  ret i64 %res135}136