1266b2a26SNoah Goldstein; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2 2266b2a26SNoah Goldstein; RUN: opt < %s -S -passes=instcombine | FileCheck %s 3266b2a26SNoah Goldstein 4266b2a26SNoah Goldsteindefine i1 @vector_reduce_maximum_signbit(<4 x double> nofpclass(nan nzero) %x) { 5266b2a26SNoah Goldstein; CHECK-LABEL: define i1 @vector_reduce_maximum_signbit 6266b2a26SNoah Goldstein; CHECK-SAME: (<4 x double> nofpclass(nan nzero) [[X:%.*]]) { 7*9eeae442SNoah Goldstein; CHECK-NEXT: ret i1 true 8266b2a26SNoah Goldstein; 9266b2a26SNoah Goldstein %x.abs = call <4 x double> @llvm.fabs.v4f64(<4 x double> %x) 10266b2a26SNoah Goldstein %op = call double @llvm.vector.reduce.fmaximum.v4f64(<4 x double> %x.abs) 11266b2a26SNoah Goldstein %cmp = fcmp oge double %op, 0.0 12266b2a26SNoah Goldstein ret i1 %cmp 13266b2a26SNoah Goldstein} 14266b2a26SNoah Goldstein 15266b2a26SNoah Goldsteindefine i1 @vector_reduce_maximum_signbit_fail_maybe_nan(<4 x double> nofpclass(nzero) %x) { 16266b2a26SNoah Goldstein; CHECK-LABEL: define i1 @vector_reduce_maximum_signbit_fail_maybe_nan 17266b2a26SNoah Goldstein; CHECK-SAME: (<4 x double> nofpclass(nzero) [[X:%.*]]) { 18266b2a26SNoah Goldstein; CHECK-NEXT: [[X_ABS:%.*]] = call <4 x double> @llvm.fabs.v4f64(<4 x double> [[X]]) 19266b2a26SNoah Goldstein; CHECK-NEXT: [[OP:%.*]] = call double @llvm.vector.reduce.fmaximum.v4f64(<4 x double> [[X_ABS]]) 20266b2a26SNoah Goldstein; CHECK-NEXT: [[CMP:%.*]] = fcmp oge double [[OP]], 0.000000e+00 21266b2a26SNoah Goldstein; CHECK-NEXT: ret i1 [[CMP]] 22266b2a26SNoah Goldstein; 23266b2a26SNoah Goldstein %x.abs = call <4 x double> @llvm.fabs.v4f64(<4 x double> %x) 24266b2a26SNoah Goldstein %op = call double @llvm.vector.reduce.fmaximum.v4f64(<4 x double> %x.abs) 25266b2a26SNoah Goldstein %cmp = fcmp oge double %op, 0.0 26266b2a26SNoah Goldstein ret i1 %cmp 27266b2a26SNoah Goldstein} 28266b2a26SNoah Goldstein 29266b2a26SNoah Goldstein 30266b2a26SNoah Goldsteindefine i1 @vector_reduce_minimum_signbit(<4 x double> nofpclass(nan nzero) %x) { 31266b2a26SNoah Goldstein; CHECK-LABEL: define i1 @vector_reduce_minimum_signbit 32266b2a26SNoah Goldstein; CHECK-SAME: (<4 x double> nofpclass(nan nzero) [[X:%.*]]) { 33*9eeae442SNoah Goldstein; CHECK-NEXT: ret i1 true 34266b2a26SNoah Goldstein; 35266b2a26SNoah Goldstein %x.abs = call <4 x double> @llvm.fabs.v4f64(<4 x double> %x) 36266b2a26SNoah Goldstein %op = call double @llvm.vector.reduce.fminimum.v4f64(<4 x double> %x.abs) 37266b2a26SNoah Goldstein %cmp = fcmp oge double %op, 0.0 38266b2a26SNoah Goldstein ret i1 %cmp 39266b2a26SNoah Goldstein} 40266b2a26SNoah Goldstein 41266b2a26SNoah Goldsteindefine i1 @vector_reduce_minimum_signbit_fail_maybe_nan(<4 x double> nofpclass(nzero) %x) { 42266b2a26SNoah Goldstein; CHECK-LABEL: define i1 @vector_reduce_minimum_signbit_fail_maybe_nan 43266b2a26SNoah Goldstein; CHECK-SAME: (<4 x double> nofpclass(nzero) [[X:%.*]]) { 44266b2a26SNoah Goldstein; CHECK-NEXT: [[X_ABS:%.*]] = call <4 x double> @llvm.fabs.v4f64(<4 x double> [[X]]) 45266b2a26SNoah Goldstein; CHECK-NEXT: [[OP:%.*]] = call double @llvm.vector.reduce.fminimum.v4f64(<4 x double> [[X_ABS]]) 46266b2a26SNoah Goldstein; CHECK-NEXT: [[CMP:%.*]] = fcmp oge double [[OP]], 0.000000e+00 47266b2a26SNoah Goldstein; CHECK-NEXT: ret i1 [[CMP]] 48266b2a26SNoah Goldstein; 49266b2a26SNoah Goldstein %x.abs = call <4 x double> @llvm.fabs.v4f64(<4 x double> %x) 50266b2a26SNoah Goldstein %op = call double @llvm.vector.reduce.fminimum.v4f64(<4 x double> %x.abs) 51266b2a26SNoah Goldstein %cmp = fcmp oge double %op, 0.0 52266b2a26SNoah Goldstein ret i1 %cmp 53266b2a26SNoah Goldstein} 54266b2a26SNoah Goldstein 55266b2a26SNoah Goldsteindefine i1 @vector_reduce_max_signbit(<4 x double> nofpclass(nan nzero) %x) { 56266b2a26SNoah Goldstein; CHECK-LABEL: define i1 @vector_reduce_max_signbit 57266b2a26SNoah Goldstein; CHECK-SAME: (<4 x double> nofpclass(nan nzero) [[X:%.*]]) { 58*9eeae442SNoah Goldstein; CHECK-NEXT: ret i1 true 59266b2a26SNoah Goldstein; 60266b2a26SNoah Goldstein %x.abs = call <4 x double> @llvm.fabs.v4f64(<4 x double> %x) 61266b2a26SNoah Goldstein %op = call double @llvm.vector.reduce.fmax.v4f64(<4 x double> %x.abs) 62266b2a26SNoah Goldstein %cmp = fcmp oge double %op, 0.0 63266b2a26SNoah Goldstein ret i1 %cmp 64266b2a26SNoah Goldstein} 65266b2a26SNoah Goldstein 66266b2a26SNoah Goldsteindefine i1 @vector_reduce_max_signbit_fail_maybe_nan(<4 x double> nofpclass(nzero) %x) { 67266b2a26SNoah Goldstein; CHECK-LABEL: define i1 @vector_reduce_max_signbit_fail_maybe_nan 68266b2a26SNoah Goldstein; CHECK-SAME: (<4 x double> nofpclass(nzero) [[X:%.*]]) { 69266b2a26SNoah Goldstein; CHECK-NEXT: [[X_ABS:%.*]] = call <4 x double> @llvm.fabs.v4f64(<4 x double> [[X]]) 70266b2a26SNoah Goldstein; CHECK-NEXT: [[OP:%.*]] = call double @llvm.vector.reduce.fmax.v4f64(<4 x double> [[X_ABS]]) 71266b2a26SNoah Goldstein; CHECK-NEXT: [[CMP:%.*]] = fcmp oge double [[OP]], 0.000000e+00 72266b2a26SNoah Goldstein; CHECK-NEXT: ret i1 [[CMP]] 73266b2a26SNoah Goldstein; 74266b2a26SNoah Goldstein %x.abs = call <4 x double> @llvm.fabs.v4f64(<4 x double> %x) 75266b2a26SNoah Goldstein %op = call double @llvm.vector.reduce.fmax.v4f64(<4 x double> %x.abs) 76266b2a26SNoah Goldstein %cmp = fcmp oge double %op, 0.0 77266b2a26SNoah Goldstein ret i1 %cmp 78266b2a26SNoah Goldstein} 79266b2a26SNoah Goldstein 80266b2a26SNoah Goldstein 81266b2a26SNoah Goldsteindefine i1 @vector_reduce_min_signbit(<4 x double> nofpclass(nan nzero) %x) { 82266b2a26SNoah Goldstein; CHECK-LABEL: define i1 @vector_reduce_min_signbit 83266b2a26SNoah Goldstein; CHECK-SAME: (<4 x double> nofpclass(nan nzero) [[X:%.*]]) { 84*9eeae442SNoah Goldstein; CHECK-NEXT: ret i1 true 85266b2a26SNoah Goldstein; 86266b2a26SNoah Goldstein %x.abs = call <4 x double> @llvm.fabs.v4f64(<4 x double> %x) 87266b2a26SNoah Goldstein %op = call double @llvm.vector.reduce.fmin.v4f64(<4 x double> %x.abs) 88266b2a26SNoah Goldstein %cmp = fcmp oge double %op, 0.0 89266b2a26SNoah Goldstein ret i1 %cmp 90266b2a26SNoah Goldstein} 91266b2a26SNoah Goldstein 92266b2a26SNoah Goldsteindefine i1 @vector_reduce_min_signbit_fail_maybe_nan(<4 x double> nofpclass(nzero) %x) { 93266b2a26SNoah Goldstein; CHECK-LABEL: define i1 @vector_reduce_min_signbit_fail_maybe_nan 94266b2a26SNoah Goldstein; CHECK-SAME: (<4 x double> nofpclass(nzero) [[X:%.*]]) { 95266b2a26SNoah Goldstein; CHECK-NEXT: [[X_ABS:%.*]] = call <4 x double> @llvm.fabs.v4f64(<4 x double> [[X]]) 96266b2a26SNoah Goldstein; CHECK-NEXT: [[OP:%.*]] = call double @llvm.vector.reduce.fmin.v4f64(<4 x double> [[X_ABS]]) 97266b2a26SNoah Goldstein; CHECK-NEXT: [[CMP:%.*]] = fcmp oge double [[OP]], 0.000000e+00 98266b2a26SNoah Goldstein; CHECK-NEXT: ret i1 [[CMP]] 99266b2a26SNoah Goldstein; 100266b2a26SNoah Goldstein %x.abs = call <4 x double> @llvm.fabs.v4f64(<4 x double> %x) 101266b2a26SNoah Goldstein %op = call double @llvm.vector.reduce.fmin.v4f64(<4 x double> %x.abs) 102266b2a26SNoah Goldstein %cmp = fcmp oge double %op, 0.0 103266b2a26SNoah Goldstein ret i1 %cmp 104266b2a26SNoah Goldstein} 105266b2a26SNoah Goldstein 106266b2a26SNoah Goldstein 107266b2a26SNoah Goldstein 108266b2a26SNoah Goldsteindefine i1 @vector_reduce_min_signbit_nnan_from_fmf(<4 x double> nofpclass(nzero) %x) { 109266b2a26SNoah Goldstein; CHECK-LABEL: define i1 @vector_reduce_min_signbit_nnan_from_fmf 110266b2a26SNoah Goldstein; CHECK-SAME: (<4 x double> nofpclass(nzero) [[X:%.*]]) { 111*9eeae442SNoah Goldstein; CHECK-NEXT: ret i1 true 112266b2a26SNoah Goldstein; 113266b2a26SNoah Goldstein %x.abs = call <4 x double> @llvm.fabs.v4f64(<4 x double> %x) 114266b2a26SNoah Goldstein %op = call nnan double @llvm.vector.reduce.fmin.v4f64(<4 x double> %x.abs) 115266b2a26SNoah Goldstein %cmp = fcmp oge double %op, 0.0 116266b2a26SNoah Goldstein ret i1 %cmp 117266b2a26SNoah Goldstein} 118266b2a26SNoah Goldstein 119266b2a26SNoah Goldstein 120