xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/constant-hoisting-cmp.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O3 -march=x86-64 |FileCheck %s
2*9880d681SAndroid Build Coastguard Workerdefine i64 @foo(i64 %data1, i64 %data2, i64 %data3)
3*9880d681SAndroid Build Coastguard Worker{
4*9880d681SAndroid Build Coastguard Worker; If constant 4294967295 is hoisted to a variable, then we won't be able to
5*9880d681SAndroid Build Coastguard Worker; use a shift right by 32 to optimize the compare.
6*9880d681SAndroid Build Coastguard Workerentry:
7*9880d681SAndroid Build Coastguard Worker  %val1 = add i64 %data3, 1
8*9880d681SAndroid Build Coastguard Worker  %x = icmp ugt i64 %data1, 4294967295
9*9880d681SAndroid Build Coastguard Worker  br i1 %x, label %End, label %L_val2
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Worker; CHECK: shrq    $32, {{.*}}
12*9880d681SAndroid Build Coastguard Worker; CHECK: shrq    $32, {{.*}}
13*9880d681SAndroid Build Coastguard WorkerL_val2:
14*9880d681SAndroid Build Coastguard Worker  %val2 = add i64 %data3, 2
15*9880d681SAndroid Build Coastguard Worker  %y = icmp ugt i64 %data2, 4294967295
16*9880d681SAndroid Build Coastguard Worker  br i1 %y, label %End, label %L_val3
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard WorkerL_val3:
19*9880d681SAndroid Build Coastguard Worker  %val3 = add i64 %data3, 3
20*9880d681SAndroid Build Coastguard Worker  br label %End
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard WorkerEnd:
23*9880d681SAndroid Build Coastguard Worker  %p1 = phi i64 [%val1,%entry], [%val2,%L_val2], [%val3,%L_val3]
24*9880d681SAndroid Build Coastguard Worker  ret i64 %p1
25*9880d681SAndroid Build Coastguard Worker}
26