120 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -S -passes=ipsccp < %s | FileCheck %s3 4 5define i1 @no_fold_fcmp_denormal_double_ieee_dynamic_denormal_undef() #0 {6; CHECK-LABEL: define i1 @no_fold_fcmp_denormal_double_ieee_dynamic_denormal_undef(7; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {8; CHECK-NEXT: [[CMP:%.*]] = fcmp une double 0x8000000000000, undef9; CHECK-NEXT: ret i1 [[CMP]]10;11 %cmp = fcmp une double 0x8000000000000, undef12 ret i1 %cmp13}14 15define i1 @no_fold_fcmp_denormal_double_ieee_dynamic_denormal_poison() #0 {16; CHECK-LABEL: define i1 @no_fold_fcmp_denormal_double_ieee_dynamic_denormal_poison(17; CHECK-SAME: ) #[[ATTR0]] {18; CHECK-NEXT: [[CMP:%.*]] = fcmp une double 0x8000000000000, poison19; CHECK-NEXT: ret i1 [[CMP]]20;21 %cmp = fcmp une double 0x8000000000000, poison22 ret i1 %cmp23}24 25define i1 @no_fold_fcmp_denormal_double_ieee_dynamic() #0 {26; CHECK-LABEL: define i1 @no_fold_fcmp_denormal_double_ieee_dynamic(27; CHECK-SAME: ) #[[ATTR0]] {28; CHECK-NEXT: [[CMP:%.*]] = fcmp une double 0x8000000000000, 0.000000e+0029; CHECK-NEXT: ret i1 [[CMP]]30;31 %cmp = fcmp une double 0x8000000000000, 0.032 ret i1 %cmp33}34 35define i1 @fold_fcmp_nondenormal_double_ieee_dynamic() #0 {36; CHECK-LABEL: define i1 @fold_fcmp_nondenormal_double_ieee_dynamic(37; CHECK-SAME: ) #[[ATTR0]] {38; CHECK-NEXT: ret i1 true39;40 %cmp = fcmp une double 2.0, 0.041 ret i1 %cmp42}43 44define <2 x i1> @no_fold_fcmp_denormal_double_ieee_dynamic_vector_splat() #0 {45; CHECK-LABEL: define <2 x i1> @no_fold_fcmp_denormal_double_ieee_dynamic_vector_splat(46; CHECK-SAME: ) #[[ATTR0]] {47; CHECK-NEXT: [[CMP:%.*]] = fcmp une <2 x double> splat (double 0x8000000000000), zeroinitializer48; CHECK-NEXT: ret <2 x i1> [[CMP]]49;50 %cmp = fcmp une <2 x double> splat (double 0x8000000000000), zeroinitializer51 ret <2 x i1> %cmp52}53 54define <2 x i1> @fold_fcmp_nondenormal_double_ieee_dynamic_vector_splat() #0 {55; CHECK-LABEL: define <2 x i1> @fold_fcmp_nondenormal_double_ieee_dynamic_vector_splat(56; CHECK-SAME: ) #[[ATTR0]] {57; CHECK-NEXT: ret <2 x i1> splat (i1 true)58;59 %cmp = fcmp une <2 x double> splat (double 2.0), zeroinitializer60 ret <2 x i1> %cmp61}62 63define <2 x i1> @fold_fcmp_nondenormal_double_ieee_dynamic_vector_nonsplat() #0 {64; CHECK-LABEL: define <2 x i1> @fold_fcmp_nondenormal_double_ieee_dynamic_vector_nonsplat(65; CHECK-SAME: ) #[[ATTR0]] {66; CHECK-NEXT: ret <2 x i1> <i1 false, i1 true>67;68 %cmp = fcmp une <2 x double> <double 2.0, double 4.0>, <double 2.0, double 8.0>69 ret <2 x i1> %cmp70}71 72define <3 x i1> @fold_fcmp_nondenormal_double_ieee_dynamic_vector_nonsplat_undef() #0 {73; CHECK-LABEL: define <3 x i1> @fold_fcmp_nondenormal_double_ieee_dynamic_vector_nonsplat_undef(74; CHECK-SAME: ) #[[ATTR0]] {75; CHECK-NEXT: ret <3 x i1> <i1 true, i1 true, i1 false>76;77 %cmp = fcmp une <3 x double> <double 2.0, double undef, double 4.0>, <double 1.0, double undef, double 4.0>78 ret <3 x i1> %cmp79}80 81define <2 x i1> @fold_fcmp_nondenormal_double_ieee_dynamic_zero() #0 {82; CHECK-LABEL: define <2 x i1> @fold_fcmp_nondenormal_double_ieee_dynamic_zero(83; CHECK-SAME: ) #[[ATTR0]] {84; CHECK-NEXT: ret <2 x i1> zeroinitializer85;86 %cmp = fcmp une <2 x double> zeroinitializer, zeroinitializer87 ret <2 x i1> %cmp88}89 90define <2 x i1> @no_fold_fcmp_denormal_double_ieee_dynamic_vector_nonsplat() #0 {91; CHECK-LABEL: define <2 x i1> @no_fold_fcmp_denormal_double_ieee_dynamic_vector_nonsplat(92; CHECK-SAME: ) #[[ATTR0]] {93; CHECK-NEXT: [[CMP:%.*]] = fcmp une <2 x double> <double 0x8000000000000, double 1.000000e+00>, zeroinitializer94; CHECK-NEXT: ret <2 x i1> [[CMP]]95;96 %cmp = fcmp une <2 x double> <double 0x8000000000000, double 1.0>, zeroinitializer97 ret <2 x i1> %cmp98}99 100define <vscale x 2 x i1> @fold_fcmp_nondenormal_double_ieee_dynamic_scalable_vector_splat() #0 {101; CHECK-LABEL: define <vscale x 2 x i1> @fold_fcmp_nondenormal_double_ieee_dynamic_scalable_vector_splat(102; CHECK-SAME: ) #[[ATTR0]] {103; CHECK-NEXT: ret <vscale x 2 x i1> splat (i1 true)104;105 %cmp = fcmp une <vscale x 2 x double> splat (double 2.0), zeroinitializer106 ret <vscale x 2 x i1> %cmp107}108 109define <vscale x 2 x i1> @no_fold_fcmp_denormal_double_ieee_dynamic_scalable_vector_splat() #0 {110; CHECK-LABEL: define <vscale x 2 x i1> @no_fold_fcmp_denormal_double_ieee_dynamic_scalable_vector_splat(111; CHECK-SAME: ) #[[ATTR0]] {112; CHECK-NEXT: [[CMP:%.*]] = fcmp une <vscale x 2 x double> splat (double 0x8000000000000), zeroinitializer113; CHECK-NEXT: ret <vscale x 2 x i1> [[CMP]]114;115 %cmp = fcmp une <vscale x 2 x double> splat (double 0x8000000000000), zeroinitializer116 ret <vscale x 2 x i1> %cmp117}118 119attributes #0 = { "denormal-fp-math"="ieee,dynamic" }120