; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 ; RUN: opt < %s -passes=instcombine -mtriple=x86_64-unknown-unknown -S | FileCheck %s define <4 x float> @test_max_ss_nan(<4 x float> %a) { ; CHECK-LABEL: define <4 x float> @test_max_ss_nan( ; CHECK-SAME: <4 x float> [[A:%.*]]) { ; CHECK-NEXT: [[RES:%.*]] = call <4 x float> @llvm.x86.sse.max.ss(<4 x float> [[A]], <4 x float> ) ; CHECK-NEXT: ret <4 x float> [[RES]] ; %res = call <4 x float> @llvm.x86.sse.max.ss(<4 x float> %a, <4 x float> ) ret <4 x float> %res } define <4 x float> @test_min_ss_inf(<4 x float> %a) { ; CHECK-LABEL: define <4 x float> @test_min_ss_inf( ; CHECK-SAME: <4 x float> [[A:%.*]]) { ; CHECK-NEXT: [[RES:%.*]] = call <4 x float> @llvm.x86.sse.min.ss(<4 x float> [[A]], <4 x float> ) ; CHECK-NEXT: ret <4 x float> [[RES]] ; %res = call <4 x float> @llvm.x86.sse.min.ss(<4 x float> %a, <4 x float> ) ret <4 x float> %res } define <2 x double> @test_max_sd_neg_zero(<2 x double> %a) { ; CHECK-LABEL: define <2 x double> @test_max_sd_neg_zero( ; CHECK-SAME: <2 x double> [[A:%.*]]) { ; CHECK-NEXT: [[RES:%.*]] = call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> [[A]], <2 x double> ) ; CHECK-NEXT: ret <2 x double> [[RES]] ; %res = call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> %a, <2 x double> ) ret <2 x double> %res } define <2 x double> @test_min_sd_neg_zero(<2 x double> %a) { ; CHECK-LABEL: define <2 x double> @test_min_sd_neg_zero( ; CHECK-SAME: <2 x double> [[A:%.*]]) { ; CHECK-NEXT: [[RES:%.*]] = call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> [[A]], <2 x double> ) ; CHECK-NEXT: ret <2 x double> [[RES]] ; %res = call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> %a, <2 x double> ) ret <2 x double> %res } define <4 x float> @test_max_ss_variable_unsafe(<4 x float> %a, <4 x float> %b) { ; CHECK-LABEL: define <4 x float> @test_max_ss_variable_unsafe( ; CHECK-SAME: <4 x float> [[A:%.*]], <4 x float> [[B:%.*]]) { ; CHECK-NEXT: [[RES:%.*]] = call <4 x float> @llvm.x86.sse.max.ss(<4 x float> [[A]], <4 x float> [[B]]) ; CHECK-NEXT: ret <4 x float> [[RES]] ; %res = call <4 x float> @llvm.x86.sse.max.ss(<4 x float> %a, <4 x float> %b) ret <4 x float> %res } define <4 x float> @test_max_ss_safe_constants() { ; CHECK-LABEL: define <4 x float> @test_max_ss_safe_constants() { ; CHECK-NEXT: ret <4 x float> ; %res = call <4 x float> @llvm.x86.sse.max.ss(<4 x float> , <4 x float> ) ret <4 x float> %res } define <2 x double> @test_min_sd_safe_expansion(<2 x i32> %a) { ; CHECK-LABEL: define <2 x double> @test_min_sd_safe_expansion( ; CHECK-SAME: <2 x i32> [[A:%.*]]) { ; CHECK-NEXT: [[SAFE_INPUT:%.*]] = sitofp <2 x i32> [[A]] to <2 x double> ; CHECK-NEXT: [[TMP1:%.*]] = extractelement <2 x double> [[SAFE_INPUT]], i64 0 ; CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[TMP1]], double 5.000000e+00) ; CHECK-NEXT: [[RES:%.*]] = insertelement <2 x double> [[SAFE_INPUT]], double [[TMP2]], i64 0 ; CHECK-NEXT: ret <2 x double> [[RES]] ; %safe_input = sitofp <2 x i32> %a to <2 x double> %res = call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> %safe_input, <2 x double> ) ret <2 x double> %res }