From 3f532e0524875c795d849bba69f890abf775a5b6 Mon Sep 17 00:00:00 2001 From: Philip Reames Date: Mon, 31 Oct 2022 11:54:37 -0700 Subject: [PATCH] [test] Add coverage for sign bits and known non-zero for scalable vectors --- llvm/test/Transforms/InstCombine/select.ll | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/llvm/test/Transforms/InstCombine/select.ll b/llvm/test/Transforms/InstCombine/select.ll index 03d3f23..cc72e35 100644 --- a/llvm/test/Transforms/InstCombine/select.ll +++ b/llvm/test/Transforms/InstCombine/select.ll @@ -3408,3 +3408,29 @@ define @and_constant_select_svec( %x, %cond, %a, %x ret %b } + +; TODO: shl should be nsw +define @scalable_sign_bits( %x) { +; CHECK-LABEL: @scalable_sign_bits( +; CHECK-NEXT: [[A:%.*]] = sext [[X:%.*]] to +; CHECK-NEXT: [[B:%.*]] = shl [[A]], shufflevector ( insertelement ( poison, i32 16, i32 0), poison, zeroinitializer) +; CHECK-NEXT: ret [[B]] +; + %a = sext %x to + %b = shl %a, shufflevector ( insertelement ( poison, i32 16, i32 0), poison, zeroinitializer) + ret %b +} + +; TODO: can use ult +define @scalable_non_zero( %x) { +; CHECK-LABEL: @scalable_non_zero( +; CHECK-NEXT: [[A:%.*]] = or [[X:%.*]], shufflevector ( insertelement ( poison, i32 1, i32 0), poison, zeroinitializer) +; CHECK-NEXT: [[B:%.*]] = add nsw [[A]], shufflevector ( insertelement ( poison, i32 -1, i32 0), poison, zeroinitializer) +; CHECK-NEXT: [[CMP:%.*]] = icmp ult [[B]], shufflevector ( insertelement ( poison, i32 56, i32 0), poison, zeroinitializer) +; CHECK-NEXT: ret [[CMP]] +; + %a = or %x, shufflevector ( insertelement ( poison, i32 1, i32 0), poison, zeroinitializer) + %b = add %a, shufflevector ( insertelement ( poison, i32 -1, i32 0), poison, zeroinitializer) + %cmp = icmp ult %b, shufflevector ( insertelement ( poison, i32 56, i32 0), poison, zeroinitializer) + ret %cmp +} -- 2.7.4