xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/shl-i64.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=x86 -mattr=+sse2 < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; Make sure that we don't generate an illegal i64 extract after LegalizeType.
4*9880d681SAndroid Build Coastguard Worker; CHECK: shll
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdefine void @test_cl(<4 x i64>*  %dst, <4 x i64>* %src, i32 %idx) {
8*9880d681SAndroid Build Coastguard Workerentry:
9*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds <4 x i64>, <4 x i64> * %src, i32 %idx
10*9880d681SAndroid Build Coastguard Worker  %0 = load <4 x i64> , <4 x i64> * %arrayidx, align 32
11*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds <4 x i64>, <4 x i64> * %dst, i32 %idx
12*9880d681SAndroid Build Coastguard Worker  %1 = load <4 x i64> , <4 x i64> * %arrayidx1, align 32
13*9880d681SAndroid Build Coastguard Worker  %2 = extractelement <4 x i64> %1, i32 0
14*9880d681SAndroid Build Coastguard Worker  %and = and i64 %2, 63
15*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <4 x i64> undef, i64 %and, i32 0
16*9880d681SAndroid Build Coastguard Worker  %splat = shufflevector <4 x i64> %3, <4 x i64> undef, <4 x i32> zeroinitializer
17*9880d681SAndroid Build Coastguard Worker  %shl = shl <4 x i64> %0, %splat
18*9880d681SAndroid Build Coastguard Worker  store <4 x i64> %shl, <4 x i64> * %arrayidx1, align 32
19*9880d681SAndroid Build Coastguard Worker  ret void
20*9880d681SAndroid Build Coastguard Worker}
21