xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/neon-or-combine.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; Check that the DAGCombiner does not crash with an assertion failure
4*9880d681SAndroid Build Coastguard Worker; when performing a target specific combine to simplify a 'or' dag node
5*9880d681SAndroid Build Coastguard Worker; according to the following rule:
6*9880d681SAndroid Build Coastguard Worker;   (or (and B, A), (and C, ~A)) => (VBSL A, B, C)
7*9880d681SAndroid Build Coastguard Worker; The assertion failure was caused by an invalid comparison between APInt
8*9880d681SAndroid Build Coastguard Worker; values with different 'BitWidth'.
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test1(<8 x i8> %a, <8 x i8> %b)  {
11*9880d681SAndroid Build Coastguard Worker  %tmp1 = and <8 x i8> %a, < i8 -1, i8 -1, i8 0, i8 0, i8 -1, i8 -1, i8 0, i8 0 >
12*9880d681SAndroid Build Coastguard Worker  %tmp2 = and <8 x i8> %b, < i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0 >
13*9880d681SAndroid Build Coastguard Worker  %tmp3 = or <8 x i8> %tmp1, %tmp2
14*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %tmp3
15*9880d681SAndroid Build Coastguard Worker}
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1
18*9880d681SAndroid Build Coastguard Worker; CHECK: ret
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test2(<16 x i8> %a, <16 x i8> %b) {
21*9880d681SAndroid Build Coastguard Worker  %tmp1 = and <16 x i8> %a, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
22*9880d681SAndroid Build Coastguard Worker  %tmp2 = and <16 x i8> %b, < i8 -1, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0 >
23*9880d681SAndroid Build Coastguard Worker  %tmp3 = or <16 x i8> %tmp1, %tmp2
24*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %tmp3
25*9880d681SAndroid Build Coastguard Worker}
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2
28*9880d681SAndroid Build Coastguard Worker; CHECK: ret
29*9880d681SAndroid Build Coastguard Worker
30