| ; RUN: llc < %s -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s |
| |
| ; Check that the DAGCombiner does not crash with an assertion failure |
| ; when performing a target specific combine to simplify a 'or' dag node |
| ; according to the following rule: |
| ; (or (and B, A), (and C, ~A)) => (VBSL A, B, C) |
| ; The assertion failure was caused by an invalid comparison between APInt |
| ; values with different 'BitWidth'. |
| |
| define <8 x i8> @test1(<8 x i8> %a, <8 x i8> %b) { |
| %tmp1 = and <8 x i8> %a, < i8 -1, i8 -1, i8 0, i8 0, i8 -1, i8 -1, i8 0, i8 0 > |
| %tmp2 = and <8 x i8> %b, < i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0 > |
| %tmp3 = or <8 x i8> %tmp1, %tmp2 |
| ret <8 x i8> %tmp3 |
| } |
| |
| ; CHECK-LABEL: test1 |
| ; CHECK: ret |
| |
| define <16 x i8> @test2(<16 x i8> %a, <16 x i8> %b) { |
| %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 > |
| %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 > |
| %tmp3 = or <16 x i8> %tmp1, %tmp2 |
| ret <16 x i8> %tmp3 |
| } |
| |
| ; CHECK-LABEL: test2 |
| ; CHECK: ret |
| |