Followup to D59363 which failed to handle the icmp(X,undef) -> isTrueWhenEqual case - similar to llvm::ConstantFoldCompareInstruction
As discussed on the review, this is affecting some previously reduced test cases, but will also prevent reductions from relying on this inconsistent behaviour in the future.
Reapplied after reversion at e1e3c75c7d with a tweak to the pseudo-probe-peep.ll test
Differential Revision: https://reviews.llvm.org/D158068
51 lines
1.8 KiB
LLVM
51 lines
1.8 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc < %s -mtriple=wasm32-- -mattr=+simd128 | FileCheck --check-prefix=CHECK-32 %s
|
|
; RUN: llc < %s -mtriple=wasm64-- -mattr=+simd128 | FileCheck --check-prefix=CHECK-64 %s
|
|
|
|
define i8 @f(ptr %0, ptr %1) {
|
|
; CHECK-32-LABEL: f:
|
|
; CHECK-32: .functype f (i32, i32) -> (i32)
|
|
; CHECK-32-NEXT: # %bb.0: # %BB
|
|
; CHECK-32-NEXT: local.get 0
|
|
; CHECK-32-NEXT: i32.const 0
|
|
; CHECK-32-NEXT: i32.store8 2
|
|
; CHECK-32-NEXT: local.get 0
|
|
; CHECK-32-NEXT: i32.const 0
|
|
; CHECK-32-NEXT: i32.store16 0
|
|
; CHECK-32-NEXT: local.get 1
|
|
; CHECK-32-NEXT: i32.const 5
|
|
; CHECK-32-NEXT: i32.store8 2
|
|
; CHECK-32-NEXT: local.get 1
|
|
; CHECK-32-NEXT: i32.const 769
|
|
; CHECK-32-NEXT: i32.store16 0
|
|
; CHECK-32-NEXT: i32.const 1
|
|
; CHECK-32-NEXT: # fallthrough-return
|
|
;
|
|
; CHECK-64-LABEL: f:
|
|
; CHECK-64: .functype f (i64, i64) -> (i32)
|
|
; CHECK-64-NEXT: # %bb.0: # %BB
|
|
; CHECK-64-NEXT: local.get 0
|
|
; CHECK-64-NEXT: i32.const 0
|
|
; CHECK-64-NEXT: i32.store8 2
|
|
; CHECK-64-NEXT: local.get 0
|
|
; CHECK-64-NEXT: i32.const 0
|
|
; CHECK-64-NEXT: i32.store16 0
|
|
; CHECK-64-NEXT: local.get 1
|
|
; CHECK-64-NEXT: i32.const 5
|
|
; CHECK-64-NEXT: i32.store8 2
|
|
; CHECK-64-NEXT: local.get 1
|
|
; CHECK-64-NEXT: i32.const 769
|
|
; CHECK-64-NEXT: i32.store16 0
|
|
; CHECK-64-NEXT: i32.const 1
|
|
; CHECK-64-NEXT: # fallthrough-return
|
|
BB:
|
|
store <3 x i8> zeroinitializer, ptr %0
|
|
%S = shufflevector <3 x i128> zeroinitializer, <3 x i128> <i128 0, i128 1, i128 2>, <3 x i32> undef
|
|
%C = icmp ule <3 x i128> %S, zeroinitializer
|
|
%C1 = zext <3 x i1> %C to <3 x i8>
|
|
%E = extractelement <3 x i8> %C1, i32 0
|
|
%B = sdiv <3 x i8> <i8 1, i8 3, i8 5>, %C1
|
|
store <3 x i8> %B, ptr %1
|
|
ret i8 %E
|
|
}
|