[llvm] 3f6e7d1 - [SLP] move test for min/max crashing; NFC
Sanjay Patel via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 26 07:28:24 PDT 2021
Author: Sanjay Patel
Date: 2021-03-26T10:28:15-04:00
New Revision: 3f6e7d1550bccc8cd2db84188aa1f65776de6ce9
URL: https://github.com/llvm/llvm-project/commit/3f6e7d1550bccc8cd2db84188aa1f65776de6ce9
DIFF: https://github.com/llvm/llvm-project/commit/3f6e7d1550bccc8cd2db84188aa1f65776de6ce9.diff
LOG: [SLP] move test for min/max crashing; NFC
This was originally just an XFAIL test, but I modified it
to check output. To make that bot-friendly, I'm moving it
to the x86 dir since it specified an x86 target.
Added:
Modified:
llvm/test/Transforms/SLPVectorizer/X86/horizontal-minmax.ll
Removed:
llvm/test/Transforms/SLPVectorizer/pr49730.ll
################################################################################
diff --git a/llvm/test/Transforms/SLPVectorizer/X86/horizontal-minmax.ll b/llvm/test/Transforms/SLPVectorizer/X86/horizontal-minmax.ll
index 433d79db490c..3d41293110f6 100644
--- a/llvm/test/Transforms/SLPVectorizer/X86/horizontal-minmax.ll
+++ b/llvm/test/Transforms/SLPVectorizer/X86/horizontal-minmax.ll
@@ -13,6 +13,8 @@ declare i32 @llvm.smax.i32(i32, i32)
declare i16 @llvm.smin.i16(i16, i16)
declare i64 @llvm.umax.i64(i64, i64)
declare i8 @llvm.umin.i8(i8, i8)
+declare i32 @llvm.smin.i32(i32, i32)
+declare i32 @llvm.umin.i32(i32, i32)
define i32 @maxi8(i32) {
; CHECK-LABEL: @maxi8(
@@ -1234,3 +1236,42 @@ define i8 @umin_intrinsic_rdx_v16i8(i8* %p0) {
%m = tail call i8 @llvm.umin.i8(i8 %mh, i8 %ml)
ret i8 %m
}
+
+; This should not crash.
+
+define void @PR49730() {
+; CHECK-LABEL: @PR49730(
+; CHECK-NEXT: [[T:%.*]] = call i32 @llvm.smin.i32(i32 undef, i32 2)
+; CHECK-NEXT: [[T1:%.*]] = sub nsw i32 undef, [[T]]
+; CHECK-NEXT: [[T2:%.*]] = call i32 @llvm.umin.i32(i32 undef, i32 [[T1]])
+; CHECK-NEXT: [[T3:%.*]] = call i32 @llvm.smin.i32(i32 undef, i32 2)
+; CHECK-NEXT: [[T4:%.*]] = sub nsw i32 undef, [[T3]]
+; CHECK-NEXT: [[T5:%.*]] = call i32 @llvm.umin.i32(i32 [[T2]], i32 [[T4]])
+; CHECK-NEXT: [[T6:%.*]] = call i32 @llvm.smin.i32(i32 undef, i32 1)
+; CHECK-NEXT: [[T7:%.*]] = sub nuw nsw i32 undef, [[T6]]
+; CHECK-NEXT: [[T8:%.*]] = call i32 @llvm.umin.i32(i32 [[T5]], i32 [[T7]])
+; CHECK-NEXT: [[T9:%.*]] = call i32 @llvm.smin.i32(i32 undef, i32 1)
+; CHECK-NEXT: [[T10:%.*]] = sub nsw i32 undef, [[T9]]
+; CHECK-NEXT: [[T11:%.*]] = call i32 @llvm.umin.i32(i32 [[T8]], i32 [[T10]])
+; CHECK-NEXT: [[T12:%.*]] = sub nsw i32 undef, undef
+; CHECK-NEXT: [[T13:%.*]] = call i32 @llvm.umin.i32(i32 [[T11]], i32 [[T12]])
+; CHECK-NEXT: [[T14:%.*]] = call i32 @llvm.umin.i32(i32 [[T13]], i32 93)
+; CHECK-NEXT: ret void
+;
+ %t = call i32 @llvm.smin.i32(i32 undef, i32 2)
+ %t1 = sub nsw i32 undef, %t
+ %t2 = call i32 @llvm.umin.i32(i32 undef, i32 %t1)
+ %t3 = call i32 @llvm.smin.i32(i32 undef, i32 2)
+ %t4 = sub nsw i32 undef, %t3
+ %t5 = call i32 @llvm.umin.i32(i32 %t2, i32 %t4)
+ %t6 = call i32 @llvm.smin.i32(i32 undef, i32 1)
+ %t7 = sub nuw nsw i32 undef, %t6
+ %t8 = call i32 @llvm.umin.i32(i32 %t5, i32 %t7)
+ %t9 = call i32 @llvm.smin.i32(i32 undef, i32 1)
+ %t10 = sub nsw i32 undef, %t9
+ %t11 = call i32 @llvm.umin.i32(i32 %t8, i32 %t10)
+ %t12 = sub nsw i32 undef, undef
+ %t13 = call i32 @llvm.umin.i32(i32 %t11, i32 %t12)
+ %t14 = call i32 @llvm.umin.i32(i32 %t13, i32 93)
+ ret void
+}
diff --git a/llvm/test/Transforms/SLPVectorizer/pr49730.ll b/llvm/test/Transforms/SLPVectorizer/pr49730.ll
deleted file mode 100644
index 13c100ec203d..000000000000
--- a/llvm/test/Transforms/SLPVectorizer/pr49730.ll
+++ /dev/null
@@ -1,53 +0,0 @@
-; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
-; RUN: opt -slp-vectorizer -S < %s | FileCheck %s
-; RUN: opt -passes=slp-vectorizer -S < %s | FileCheck %s
-
-target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:1-p2:32:8:8:32-ni:2"
-target triple = "x86_64-unknown-linux-gnu"
-
-; This should not crash.
-define void @test() {
-; CHECK-LABEL: @test(
-; CHECK-NEXT: bb:
-; CHECK-NEXT: [[T:%.*]] = call i32 @llvm.smin.i32(i32 undef, i32 2)
-; CHECK-NEXT: [[T1:%.*]] = sub nsw i32 undef, [[T]]
-; CHECK-NEXT: [[T2:%.*]] = call i32 @llvm.umin.i32(i32 undef, i32 [[T1]])
-; CHECK-NEXT: [[T3:%.*]] = call i32 @llvm.smin.i32(i32 undef, i32 2)
-; CHECK-NEXT: [[T4:%.*]] = sub nsw i32 undef, [[T3]]
-; CHECK-NEXT: [[T5:%.*]] = call i32 @llvm.umin.i32(i32 [[T2]], i32 [[T4]])
-; CHECK-NEXT: [[T6:%.*]] = call i32 @llvm.smin.i32(i32 undef, i32 1)
-; CHECK-NEXT: [[T7:%.*]] = sub nuw nsw i32 undef, [[T6]]
-; CHECK-NEXT: [[T8:%.*]] = call i32 @llvm.umin.i32(i32 [[T5]], i32 [[T7]])
-; CHECK-NEXT: [[T9:%.*]] = call i32 @llvm.smin.i32(i32 undef, i32 1)
-; CHECK-NEXT: [[T10:%.*]] = sub nsw i32 undef, [[T9]]
-; CHECK-NEXT: [[T11:%.*]] = call i32 @llvm.umin.i32(i32 [[T8]], i32 [[T10]])
-; CHECK-NEXT: [[T12:%.*]] = sub nsw i32 undef, undef
-; CHECK-NEXT: [[T13:%.*]] = call i32 @llvm.umin.i32(i32 [[T11]], i32 [[T12]])
-; CHECK-NEXT: [[T14:%.*]] = call i32 @llvm.umin.i32(i32 [[T13]], i32 93)
-; CHECK-NEXT: ret void
-;
-
-bb:
- %t = call i32 @llvm.smin.i32(i32 undef, i32 2)
- %t1 = sub nsw i32 undef, %t
- %t2 = call i32 @llvm.umin.i32(i32 undef, i32 %t1)
- %t3 = call i32 @llvm.smin.i32(i32 undef, i32 2)
- %t4 = sub nsw i32 undef, %t3
- %t5 = call i32 @llvm.umin.i32(i32 %t2, i32 %t4)
- %t6 = call i32 @llvm.smin.i32(i32 undef, i32 1)
- %t7 = sub nuw nsw i32 undef, %t6
- %t8 = call i32 @llvm.umin.i32(i32 %t5, i32 %t7)
- %t9 = call i32 @llvm.smin.i32(i32 undef, i32 1)
- %t10 = sub nsw i32 undef, %t9
- %t11 = call i32 @llvm.umin.i32(i32 %t8, i32 %t10)
- %t12 = sub nsw i32 undef, undef
- %t13 = call i32 @llvm.umin.i32(i32 %t11, i32 %t12)
- %t14 = call i32 @llvm.umin.i32(i32 %t13, i32 93)
- ret void
-}
-
-; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
-declare i32 @llvm.smin.i32(i32, i32)
-
-; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
-declare i32 @llvm.umin.i32(i32, i32)
More information about the llvm-commits
mailing list