@@ -75,7 +75,8 @@ define <2 x float> @canonicalize_poison_vector() {
7575
7676define float @canonicalize_denorm () {
7777; CHECK-LABEL: @canonicalize_denorm(
78- ; CHECK-NEXT: ret float 0x380FFFFFC0000000
78+ ; CHECK-NEXT: [[RET:%.*]] = call float @llvm.canonicalize.f32(float 0x380FFFFFC0000000)
79+ ; CHECK-NEXT: ret float [[RET]]
7980;
8081 %ret = call float @llvm.canonicalize.f32 (float bitcast (i32 8388607 to float ))
8182 ret float %ret
@@ -369,7 +370,8 @@ define double @canonicalize_1.0_f64() {
369370
370371define double @canonicalize_0x00000000000001_f64 () {
371372; CHECK-LABEL: @canonicalize_0x00000000000001_f64(
372- ; CHECK-NEXT: ret double 4.940660e-324
373+ ; CHECK-NEXT: [[RET:%.*]] = call double @llvm.canonicalize.f64(double 4.940660e-324)
374+ ; CHECK-NEXT: ret double [[RET]]
373375;
374376 %ret = call double @llvm.canonicalize.f64 (double 0x00000000000001 )
375377 ret double %ret
@@ -413,7 +415,8 @@ define half @canonicalize_1.0_f16() {
413415
414416define half @canonicalize_0x0001_f16 () {
415417; CHECK-LABEL: @canonicalize_0x0001_f16(
416- ; CHECK-NEXT: ret half 0xH0001
418+ ; CHECK-NEXT: [[RET:%.*]] = call half @llvm.canonicalize.f16(half 0xH0001)
419+ ; CHECK-NEXT: ret half [[RET]]
417420;
418421 %ret = call half @llvm.canonicalize.f16 (half 0xH0001)
419422 ret half %ret
@@ -457,7 +460,8 @@ define fp128 @canonicalize_1.0_fp128() {
457460
458461define fp128 @canonicalize_0x00000000000000000000000000000001_fp128 () {
459462; CHECK-LABEL: @canonicalize_0x00000000000000000000000000000001_fp128(
460- ; CHECK-NEXT: ret fp128 0xL00000000000000000000000000000001
463+ ; CHECK-NEXT: [[RET:%.*]] = call fp128 @llvm.canonicalize.f128(fp128 0xL00000000000000000000000000000001)
464+ ; CHECK-NEXT: ret fp128 [[RET]]
461465;
462466 %ret = call fp128 @llvm.canonicalize.fp128 (fp128 0xL00000000000000000000000000000001)
463467 ret fp128 %ret
@@ -510,7 +514,8 @@ define bfloat @canonicalize_1.0_bf16() {
510514
511515define bfloat @canonicalize_0x0001_bf16 () {
512516; CHECK-LABEL: @canonicalize_0x0001_bf16(
513- ; CHECK-NEXT: ret bfloat 0xR0001
517+ ; CHECK-NEXT: [[RET:%.*]] = call bfloat @llvm.canonicalize.bf16(bfloat 0xR0001)
518+ ; CHECK-NEXT: ret bfloat [[RET]]
514519;
515520 %ret = call bfloat @llvm.canonicalize.bf16 (bfloat 0xR0001)
516521 ret bfloat %ret
@@ -762,243 +767,6 @@ define ppc_fp128 @canonicalize_neg1.0_ppcf128() {
762767 ret ppc_fp128 %ret
763768}
764769
765- ; --------------------------------------------------------------------
766- ; Test folds of using canonicalize + is.fpclass to inspect the denormal mode.
767- ; --------------------------------------------------------------------
768-
769- define i1 @is_poszero_daz_enabled_check_dynamic () "denormal-fp-math" ="ieee,dynamic" {
770- ; CHECK-LABEL: @is_poszero_daz_enabled_check_dynamic(
771- ; CHECK-NEXT: [[CANONICAL:%.*]] = call float @llvm.canonicalize.f32(float 0x36A0000000000000)
772- ; CHECK-NEXT: [[IS_POS_ZERO:%.*]] = call i1 @llvm.is.fpclass.f32(float [[CANONICAL]], i32 64)
773- ; CHECK-NEXT: ret i1 [[IS_POS_ZERO]]
774- ;
775- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 1 to float ))
776- %is.pos.zero = call i1 @llvm.is.fpclass.f32 (float %canonical , i32 64 )
777- ret i1 %is.pos.zero
778- }
779-
780- define i1 @is_preserve_sign_daz_enabled_check_dynamic () "denormal-fp-math" ="ieee,dynamic" {
781- ; CHECK-LABEL: @is_preserve_sign_daz_enabled_check_dynamic(
782- ; CHECK-NEXT: [[CANONICAL:%.*]] = call float @llvm.canonicalize.f32(float 0xB6A0000000000000)
783- ; CHECK-NEXT: [[IS_NEG_ZERO:%.*]] = call i1 @llvm.is.fpclass.f32(float [[CANONICAL]], i32 32)
784- ; CHECK-NEXT: ret i1 [[IS_NEG_ZERO]]
785- ;
786- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 -2147483647 to float ))
787- %is.neg.zero = call i1 @llvm.is.fpclass.f32 (float %canonical , i32 32 )
788- ret i1 %is.neg.zero
789- }
790-
791- define i1 @is_positive_zero_daz_enabled_check_dynamic () "denormal-fp-math" ="ieee,dynamic" {
792- ; CHECK-LABEL: @is_positive_zero_daz_enabled_check_dynamic(
793- ; CHECK-NEXT: [[CANONICAL:%.*]] = call float @llvm.canonicalize.f32(float 0xB6A0000000000000)
794- ; CHECK-NEXT: [[IS_POS_ZERO:%.*]] = call i1 @llvm.is.fpclass.f32(float [[CANONICAL]], i32 64)
795- ; CHECK-NEXT: ret i1 [[IS_POS_ZERO]]
796- ;
797- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 -2147483647 to float ))
798- %is.pos.zero = call i1 @llvm.is.fpclass.f32 (float %canonical , i32 64 )
799- ret i1 %is.pos.zero
800- }
801-
802- define i1 @is_any_daz_enabled_check_dynamic () "denormal-fp-math" ="ieee,dynamic" {
803- ; CHECK-LABEL: @is_any_daz_enabled_check_dynamic(
804- ; CHECK-NEXT: [[CANONICAL:%.*]] = call float @llvm.canonicalize.f32(float 0xB6A0000000000000)
805- ; CHECK-NEXT: [[IS_ANY_ZERO:%.*]] = call i1 @llvm.is.fpclass.f32(float [[CANONICAL]], i32 96)
806- ; CHECK-NEXT: ret i1 [[IS_ANY_ZERO]]
807- ;
808- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 -2147483647 to float ))
809- %is.any.zero = call i1 @llvm.is.fpclass.f32 (float %canonical , i32 96 )
810- ret i1 %is.any.zero
811- }
812-
813- define i1 @is_not_daz_enabled_check_dynamic () "denormal-fp-math" ="ieee,dynamic" {
814- ; CHECK-LABEL: @is_not_daz_enabled_check_dynamic(
815- ; CHECK-NEXT: [[CANONICAL:%.*]] = call float @llvm.canonicalize.f32(float 0x36A0000000000000)
816- ; CHECK-NEXT: [[IS_NOT_POS_ZERO:%.*]] = call i1 @llvm.is.fpclass.f32(float [[CANONICAL]], i32 959)
817- ; CHECK-NEXT: ret i1 [[IS_NOT_POS_ZERO]]
818- ;
819- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 1 to float ))
820- %is.not.pos.zero = call i1 @llvm.is.fpclass.f32 (float %canonical , i32 959 )
821- ret i1 %is.not.pos.zero
822- }
823-
824- define i1 @is_poszero_daz_enabled_check_ieee () "denormal-fp-math" ="ieee,ieee" {
825- ; CHECK-LABEL: @is_poszero_daz_enabled_check_ieee(
826- ; CHECK-NEXT: ret i1 false
827- ;
828- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 1 to float ))
829- %is.pos.zero = call i1 @llvm.is.fpclass.f32 (float %canonical , i32 64 )
830- ret i1 %is.pos.zero
831- }
832-
833- define i1 @is_preserve_sign_daz_enabled_check_ieee () "denormal-fp-math" ="ieee,ieee" {
834- ; CHECK-LABEL: @is_preserve_sign_daz_enabled_check_ieee(
835- ; CHECK-NEXT: ret i1 false
836- ;
837- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 -2147483647 to float ))
838- %is.neg.zero = call i1 @llvm.is.fpclass.f32 (float %canonical , i32 32 )
839- ret i1 %is.neg.zero
840- }
841-
842- define i1 @is_positive_zero_daz_enabled_check_ieee () "denormal-fp-math" ="ieee,ieee" {
843- ; CHECK-LABEL: @is_positive_zero_daz_enabled_check_ieee(
844- ; CHECK-NEXT: ret i1 false
845- ;
846- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 -2147483647 to float ))
847- %is.pos.zero = call i1 @llvm.is.fpclass.f32 (float %canonical , i32 64 )
848- ret i1 %is.pos.zero
849- }
850-
851- define i1 @is_any_daz_enabled_check_ieee () "denormal-fp-math" ="ieee,ieee" {
852- ; CHECK-LABEL: @is_any_daz_enabled_check_ieee(
853- ; CHECK-NEXT: ret i1 false
854- ;
855- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 -2147483647 to float ))
856- %is.any.zero = call i1 @llvm.is.fpclass.f32 (float %canonical , i32 96 )
857- ret i1 %is.any.zero
858- }
859-
860- define i1 @is_not_daz_enabled_check_ieee () "denormal-fp-math" ="ieee,ieee" {
861- ; CHECK-LABEL: @is_not_daz_enabled_check_ieee(
862- ; CHECK-NEXT: ret i1 true
863- ;
864- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 1 to float ))
865- %is.not.pos.zero = call i1 @llvm.is.fpclass.f32 (float %canonical , i32 959 )
866- ret i1 %is.not.pos.zero
867- }
868-
869- define i1 @is_poszero_daz_enabled_check_preserve_sign () "denormal-fp-math" ="ieee,preserve-sign" {
870- ; CHECK-LABEL: @is_poszero_daz_enabled_check_preserve_sign(
871- ; CHECK-NEXT: ret i1 true
872- ;
873- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 1 to float ))
874- %is.pos.zero = call i1 @llvm.is.fpclass.f32 (float %canonical , i32 64 )
875- ret i1 %is.pos.zero
876- }
877-
878- define i1 @is_preserve_sign_daz_enabled_check_preserve_sign () "denormal-fp-math" ="ieee,preserve-sign" {
879- ; CHECK-LABEL: @is_preserve_sign_daz_enabled_check_preserve_sign(
880- ; CHECK-NEXT: ret i1 true
881- ;
882- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 -2147483647 to float ))
883- %is.neg.zero = call i1 @llvm.is.fpclass.f32 (float %canonical , i32 32 )
884- ret i1 %is.neg.zero
885- }
886-
887- define i1 @is_positive_zero_daz_enabled_check_preserve_sign () "denormal-fp-math" ="ieee,preserve-sign" {
888- ; CHECK-LABEL: @is_positive_zero_daz_enabled_check_preserve_sign(
889- ; CHECK-NEXT: ret i1 false
890- ;
891- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 -2147483647 to float ))
892- %is.pos.zero = call i1 @llvm.is.fpclass.f32 (float %canonical , i32 64 )
893- ret i1 %is.pos.zero
894- }
895-
896- define i1 @is_any_daz_enabled_check_preserve_sign () "denormal-fp-math" ="ieee,preserve-sign" {
897- ; CHECK-LABEL: @is_any_daz_enabled_check_preserve_sign(
898- ; CHECK-NEXT: ret i1 true
899- ;
900- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 -2147483647 to float ))
901- %is.any.zero = call i1 @llvm.is.fpclass.f32 (float %canonical , i32 96 )
902- ret i1 %is.any.zero
903- }
904-
905- define i1 @is_not_daz_enabled_check_preserve_sign () "denormal-fp-math" ="ieee,preserve-sign" {
906- ; CHECK-LABEL: @is_not_daz_enabled_check_preserve_sign(
907- ; CHECK-NEXT: ret i1 false
908- ;
909- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 1 to float ))
910- %is.not.pos.zero = call i1 @llvm.is.fpclass.f32 (float %canonical , i32 959 )
911- ret i1 %is.not.pos.zero
912- }
913-
914- define i1 @is_poszero_daz_enabled_check_positive_zero () "denormal-fp-math" ="ieee,positive-zero" {
915- ; CHECK-LABEL: @is_poszero_daz_enabled_check_positive_zero(
916- ; CHECK-NEXT: ret i1 true
917- ;
918- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 1 to float ))
919- %is.pos.zero = call i1 @llvm.is.fpclass.f32 (float %canonical , i32 64 )
920- ret i1 %is.pos.zero
921- }
922-
923- define i1 @is_preserve_sign_daz_enabled_check_positive_zero () "denormal-fp-math" ="ieee,positive-zero" {
924- ; CHECK-LABEL: @is_preserve_sign_daz_enabled_check_positive_zero(
925- ; CHECK-NEXT: ret i1 false
926- ;
927- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 -2147483647 to float ))
928- %is.neg.zero = call i1 @llvm.is.fpclass.f32 (float %canonical , i32 32 )
929- ret i1 %is.neg.zero
930- }
931-
932- define i1 @is_positive_zero_daz_enabled_check_positive_zero () "denormal-fp-math" ="ieee,positive-zero" {
933- ; CHECK-LABEL: @is_positive_zero_daz_enabled_check_positive_zero(
934- ; CHECK-NEXT: ret i1 true
935- ;
936- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 -2147483647 to float ))
937- %is.pos.zero = call i1 @llvm.is.fpclass.f32 (float %canonical , i32 64 )
938- ret i1 %is.pos.zero
939- }
940-
941- define i1 @is_any_daz_enabled_check_positive_zero () "denormal-fp-math" ="ieee,positive-zero" {
942- ; CHECK-LABEL: @is_any_daz_enabled_check_positive_zero(
943- ; CHECK-NEXT: ret i1 true
944- ;
945- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 -2147483647 to float ))
946- %is.any.zero = call i1 @llvm.is.fpclass.f32 (float %canonical , i32 96 )
947- ret i1 %is.any.zero
948- }
949-
950- define i1 @is_not_daz_enabled_check_positive_zero () "denormal-fp-math" ="ieee,positive-zero" {
951- ; CHECK-LABEL: @is_not_daz_enabled_check_positive_zero(
952- ; CHECK-NEXT: ret i1 false
953- ;
954- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 1 to float ))
955- %is.not.pos.zero = call i1 @llvm.is.fpclass.f32 (float %canonical , i32 959 )
956- ret i1 %is.not.pos.zero
957- }
958-
959- define i1 @is_poszero_daz_enabled_check_dynamic_bitcast () "denormal-fp-math" ="ieee,dynamic" {
960- ; CHECK-LABEL: @is_poszero_daz_enabled_check_dynamic_bitcast(
961- ; CHECK-NEXT: [[CANONICAL:%.*]] = call float @llvm.canonicalize.f32(float 0x36A0000000000000)
962- ; CHECK-NEXT: [[BITCAST:%.*]] = bitcast float [[CANONICAL]] to i32
963- ; CHECK-NEXT: [[IS_POS_ZERO:%.*]] = icmp eq i32 [[BITCAST]], 0
964- ; CHECK-NEXT: ret i1 [[IS_POS_ZERO]]
965- ;
966- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 1 to float ))
967- %bitcast = bitcast float %canonical to i32
968- %is.pos.zero = icmp eq i32 %bitcast , 0
969- ret i1 %is.pos.zero
970- }
971-
972- define i1 @is_poszero_daz_enabled_check_preserve_sign_bitcast () "denormal-fp-math" ="ieee,preserve-sign" {
973- ; CHECK-LABEL: @is_poszero_daz_enabled_check_preserve_sign_bitcast(
974- ; CHECK-NEXT: ret i1 true
975- ;
976- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 1 to float ))
977- %bitcast = bitcast float %canonical to i32
978- %is.pos.zero = icmp eq i32 %bitcast , 0
979- ret i1 %is.pos.zero
980- }
981-
982- define i1 @is_poszero_daz_enabled_check_positive_zero_bitcast () "denormal-fp-math" ="ieee,positive-zero" {
983- ; CHECK-LABEL: @is_poszero_daz_enabled_check_positive_zero_bitcast(
984- ; CHECK-NEXT: ret i1 true
985- ;
986- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 1 to float ))
987- %bitcast = bitcast float %canonical to i32
988- %is.pos.zero = icmp eq i32 %bitcast , 0
989- ret i1 %is.pos.zero
990- }
991-
992- define i1 @is_poszero_daz_enabled_check_ieee_bitcast () "denormal-fp-math" ="ieee,ieee" {
993- ; CHECK-LABEL: @is_poszero_daz_enabled_check_ieee_bitcast(
994- ; CHECK-NEXT: ret i1 false
995- ;
996- %canonical = call float @llvm.canonicalize.f32 (float bitcast (i32 1 to float ))
997- %bitcast = bitcast float %canonical to i32
998- %is.pos.zero = icmp eq i32 %bitcast , 0
999- ret i1 %is.pos.zero
1000- }
1001-
1002770declare bfloat @llvm.canonicalize.bf16 (bfloat)
1003771declare half @llvm.canonicalize.f16 (half )
1004772declare float @llvm.canonicalize.f32 (float )
@@ -1007,4 +775,3 @@ declare double @llvm.canonicalize.f64(double)
1007775declare fp128 @llvm.canonicalize.fp128 (fp128 )
1008776declare x86_fp80 @llvm.canonicalize.f80 (x86_fp80 )
1009777declare ppc_fp128 @llvm.canonicalize.ppcf128 (ppc_fp128 )
1010- declare i1 @llvm.is.fpclass.f32 (float , i32 immarg)
0 commit comments