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