| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 |
| ; RUN: opt -S -passes=ipsccp < %s | FileCheck %s |
| |
| |
| define i1 @no_fold_fcmp_denormal_double_ieee_dynamic_denormal_undef() #0 { |
| ; CHECK-LABEL: define i1 @no_fold_fcmp_denormal_double_ieee_dynamic_denormal_undef( |
| ; CHECK-SAME: ) #[[ATTR0:[0-9]+]] { |
| ; CHECK-NEXT: [[CMP:%.*]] = fcmp une double 0x8000000000000, undef |
| ; CHECK-NEXT: ret i1 [[CMP]] |
| ; |
| %cmp = fcmp une double 0x8000000000000, undef |
| ret i1 %cmp |
| } |
| |
| define i1 @no_fold_fcmp_denormal_double_ieee_dynamic_denormal_poison() #0 { |
| ; CHECK-LABEL: define i1 @no_fold_fcmp_denormal_double_ieee_dynamic_denormal_poison( |
| ; CHECK-SAME: ) #[[ATTR0]] { |
| ; CHECK-NEXT: [[CMP:%.*]] = fcmp une double 0x8000000000000, poison |
| ; CHECK-NEXT: ret i1 [[CMP]] |
| ; |
| %cmp = fcmp une double 0x8000000000000, poison |
| ret i1 %cmp |
| } |
| |
| define i1 @no_fold_fcmp_denormal_double_ieee_dynamic() #0 { |
| ; CHECK-LABEL: define i1 @no_fold_fcmp_denormal_double_ieee_dynamic( |
| ; CHECK-SAME: ) #[[ATTR0]] { |
| ; CHECK-NEXT: [[CMP:%.*]] = fcmp une double 0x8000000000000, 0.000000e+00 |
| ; CHECK-NEXT: ret i1 [[CMP]] |
| ; |
| %cmp = fcmp une double 0x8000000000000, 0.0 |
| ret i1 %cmp |
| } |
| |
| define i1 @fold_fcmp_nondenormal_double_ieee_dynamic() #0 { |
| ; CHECK-LABEL: define i1 @fold_fcmp_nondenormal_double_ieee_dynamic( |
| ; CHECK-SAME: ) #[[ATTR0]] { |
| ; CHECK-NEXT: ret i1 true |
| ; |
| %cmp = fcmp une double 2.0, 0.0 |
| ret i1 %cmp |
| } |
| |
| define <2 x i1> @no_fold_fcmp_denormal_double_ieee_dynamic_vector_splat() #0 { |
| ; CHECK-LABEL: define <2 x i1> @no_fold_fcmp_denormal_double_ieee_dynamic_vector_splat( |
| ; CHECK-SAME: ) #[[ATTR0]] { |
| ; CHECK-NEXT: [[CMP:%.*]] = fcmp une <2 x double> splat (double 0x8000000000000), zeroinitializer |
| ; CHECK-NEXT: ret <2 x i1> [[CMP]] |
| ; |
| %cmp = fcmp une <2 x double> splat (double 0x8000000000000), zeroinitializer |
| ret <2 x i1> %cmp |
| } |
| |
| define <2 x i1> @fold_fcmp_nondenormal_double_ieee_dynamic_vector_splat() #0 { |
| ; CHECK-LABEL: define <2 x i1> @fold_fcmp_nondenormal_double_ieee_dynamic_vector_splat( |
| ; CHECK-SAME: ) #[[ATTR0]] { |
| ; CHECK-NEXT: ret <2 x i1> splat (i1 true) |
| ; |
| %cmp = fcmp une <2 x double> splat (double 2.0), zeroinitializer |
| ret <2 x i1> %cmp |
| } |
| |
| define <2 x i1> @fold_fcmp_nondenormal_double_ieee_dynamic_vector_nonsplat() #0 { |
| ; CHECK-LABEL: define <2 x i1> @fold_fcmp_nondenormal_double_ieee_dynamic_vector_nonsplat( |
| ; CHECK-SAME: ) #[[ATTR0]] { |
| ; CHECK-NEXT: ret <2 x i1> <i1 false, i1 true> |
| ; |
| %cmp = fcmp une <2 x double> <double 2.0, double 4.0>, <double 2.0, double 8.0> |
| ret <2 x i1> %cmp |
| } |
| |
| define <3 x i1> @fold_fcmp_nondenormal_double_ieee_dynamic_vector_nonsplat_undef() #0 { |
| ; CHECK-LABEL: define <3 x i1> @fold_fcmp_nondenormal_double_ieee_dynamic_vector_nonsplat_undef( |
| ; CHECK-SAME: ) #[[ATTR0]] { |
| ; CHECK-NEXT: ret <3 x i1> <i1 true, i1 true, i1 false> |
| ; |
| %cmp = fcmp une <3 x double> <double 2.0, double undef, double 4.0>, <double 1.0, double undef, double 4.0> |
| ret <3 x i1> %cmp |
| } |
| |
| define <2 x i1> @fold_fcmp_nondenormal_double_ieee_dynamic_zero() #0 { |
| ; CHECK-LABEL: define <2 x i1> @fold_fcmp_nondenormal_double_ieee_dynamic_zero( |
| ; CHECK-SAME: ) #[[ATTR0]] { |
| ; CHECK-NEXT: ret <2 x i1> zeroinitializer |
| ; |
| %cmp = fcmp une <2 x double> zeroinitializer, zeroinitializer |
| ret <2 x i1> %cmp |
| } |
| |
| define <2 x i1> @no_fold_fcmp_denormal_double_ieee_dynamic_vector_nonsplat() #0 { |
| ; CHECK-LABEL: define <2 x i1> @no_fold_fcmp_denormal_double_ieee_dynamic_vector_nonsplat( |
| ; CHECK-SAME: ) #[[ATTR0]] { |
| ; CHECK-NEXT: [[CMP:%.*]] = fcmp une <2 x double> <double 0x8000000000000, double 1.000000e+00>, zeroinitializer |
| ; CHECK-NEXT: ret <2 x i1> [[CMP]] |
| ; |
| %cmp = fcmp une <2 x double> <double 0x8000000000000, double 1.0>, zeroinitializer |
| ret <2 x i1> %cmp |
| } |
| |
| define <vscale x 2 x i1> @fold_fcmp_nondenormal_double_ieee_dynamic_scalable_vector_splat() #0 { |
| ; CHECK-LABEL: define <vscale x 2 x i1> @fold_fcmp_nondenormal_double_ieee_dynamic_scalable_vector_splat( |
| ; CHECK-SAME: ) #[[ATTR0]] { |
| ; CHECK-NEXT: ret <vscale x 2 x i1> splat (i1 true) |
| ; |
| %cmp = fcmp une <vscale x 2 x double> splat (double 2.0), zeroinitializer |
| ret <vscale x 2 x i1> %cmp |
| } |
| |
| define <vscale x 2 x i1> @no_fold_fcmp_denormal_double_ieee_dynamic_scalable_vector_splat() #0 { |
| ; CHECK-LABEL: define <vscale x 2 x i1> @no_fold_fcmp_denormal_double_ieee_dynamic_scalable_vector_splat( |
| ; CHECK-SAME: ) #[[ATTR0]] { |
| ; CHECK-NEXT: [[CMP:%.*]] = fcmp une <vscale x 2 x double> splat (double 0x8000000000000), zeroinitializer |
| ; CHECK-NEXT: ret <vscale x 2 x i1> [[CMP]] |
| ; |
| %cmp = fcmp une <vscale x 2 x double> splat (double 0x8000000000000), zeroinitializer |
| ret <vscale x 2 x i1> %cmp |
| } |
| |
| attributes #0 = { "denormal-fp-math"="ieee,dynamic" } |