Simon Pilgrim e6b85c3027 [DAG] FoldSetCC - add missing icmp(X,undef) -> isTrueWhenEqual case (REAPPLIED)
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 e1e3c75c7dad72 with a tweak to the pseudo-probe-peep.ll test

Differential Revision: https://reviews.llvm.org/D158068
2023-09-13 12:33:39 +01:00

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
}