@@ -503,5 +503,95 @@ define float @ret_canonicalize_dynamic_constant_snan() "denormal-fp-math"="dynam
503503 ret float %call
504504}
505505
506+ define float @ret_canonicalize_daz_not_nzero_not_nsub (float nofpclass(nzero nsub) %x ) "denormal-fp-math" ="preserve-sign,preserve-sign" {
507+ ; CHECK-LABEL: define nofpclass(snan sub) float @ret_canonicalize_daz_not_nzero_not_nsub
508+ ; CHECK-SAME: (float nofpclass(nzero nsub) [[X:%.*]]) #[[ATTR10]] {
509+ ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan sub) float @llvm.canonicalize.f32(float nofpclass(nzero nsub) [[X]]) #[[ATTR12]]
510+ ; CHECK-NEXT: ret float [[CALL]]
511+ ;
512+ %call = call float @llvm.canonicalize.f32 (float %x )
513+ ret float %call
514+ }
515+
516+ define float @ret_canonicalize_daz_not_nsub (float nofpclass(nsub) %x ) "denormal-fp-math" ="preserve-sign,preserve-sign" {
517+ ; CHECK-LABEL: define nofpclass(snan sub) float @ret_canonicalize_daz_not_nsub
518+ ; CHECK-SAME: (float nofpclass(nsub) [[X:%.*]]) #[[ATTR10]] {
519+ ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan sub) float @llvm.canonicalize.f32(float nofpclass(nsub) [[X]]) #[[ATTR12]]
520+ ; CHECK-NEXT: ret float [[CALL]]
521+ ;
522+ %call = call float @llvm.canonicalize.f32 (float %x )
523+ ret float %call
524+ }
525+
526+ define float @ret_canonicalize_daz_not_nzero (float nofpclass(nzero) %x ) "denormal-fp-math" ="preserve-sign,preserve-sign" {
527+ ; CHECK-LABEL: define nofpclass(snan sub) float @ret_canonicalize_daz_not_nzero
528+ ; CHECK-SAME: (float nofpclass(nzero) [[X:%.*]]) #[[ATTR10]] {
529+ ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan sub) float @llvm.canonicalize.f32(float nofpclass(nzero) [[X]]) #[[ATTR12]]
530+ ; CHECK-NEXT: ret float [[CALL]]
531+ ;
532+ %call = call float @llvm.canonicalize.f32 (float %x )
533+ ret float %call
534+ }
535+
536+ define float @ret_canonicalize_daz_not_pzero_not_psub (float nofpclass(pzero psub) %x ) "denormal-fp-math" ="preserve-sign,preserve-sign" {
537+ ; CHECK-LABEL: define nofpclass(snan sub) float @ret_canonicalize_daz_not_pzero_not_psub
538+ ; CHECK-SAME: (float nofpclass(pzero psub) [[X:%.*]]) #[[ATTR10]] {
539+ ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan sub) float @llvm.canonicalize.f32(float nofpclass(pzero psub) [[X]]) #[[ATTR12]]
540+ ; CHECK-NEXT: ret float [[CALL]]
541+ ;
542+ %call = call float @llvm.canonicalize.f32 (float %x )
543+ ret float %call
544+ }
545+
546+ define float @ret_canonicalize_daz_not_psub (float nofpclass(psub) %x ) "denormal-fp-math" ="preserve-sign,preserve-sign" {
547+ ; CHECK-LABEL: define nofpclass(snan sub) float @ret_canonicalize_daz_not_psub
548+ ; CHECK-SAME: (float nofpclass(psub) [[X:%.*]]) #[[ATTR10]] {
549+ ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan sub) float @llvm.canonicalize.f32(float nofpclass(psub) [[X]]) #[[ATTR12]]
550+ ; CHECK-NEXT: ret float [[CALL]]
551+ ;
552+ %call = call float @llvm.canonicalize.f32 (float %x )
553+ ret float %call
554+ }
555+
556+ define float @ret_canonicalize_daz_not_pzero (float nofpclass(pzero) %x ) "denormal-fp-math" ="preserve-sign,preserve-sign" {
557+ ; CHECK-LABEL: define nofpclass(snan sub) float @ret_canonicalize_daz_not_pzero
558+ ; CHECK-SAME: (float nofpclass(pzero) [[X:%.*]]) #[[ATTR10]] {
559+ ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan sub) float @llvm.canonicalize.f32(float nofpclass(pzero) [[X]]) #[[ATTR12]]
560+ ; CHECK-NEXT: ret float [[CALL]]
561+ ;
562+ %call = call float @llvm.canonicalize.f32 (float %x )
563+ ret float %call
564+ }
565+
566+ define float @ret_canonicalize_daz_not_zero (float nofpclass(zero) %x ) "denormal-fp-math" ="preserve-sign,preserve-sign" {
567+ ; CHECK-LABEL: define nofpclass(snan sub) float @ret_canonicalize_daz_not_zero
568+ ; CHECK-SAME: (float nofpclass(zero) [[X:%.*]]) #[[ATTR10]] {
569+ ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan sub) float @llvm.canonicalize.f32(float nofpclass(zero) [[X]]) #[[ATTR12]]
570+ ; CHECK-NEXT: ret float [[CALL]]
571+ ;
572+ %call = call float @llvm.canonicalize.f32 (float %x )
573+ ret float %call
574+ }
575+
576+ define float @ret_canonicalize_daz_not_sub (float nofpclass(sub ) %x ) "denormal-fp-math" ="preserve-sign,preserve-sign" {
577+ ; CHECK-LABEL: define nofpclass(snan sub) float @ret_canonicalize_daz_not_sub
578+ ; CHECK-SAME: (float nofpclass(sub) [[X:%.*]]) #[[ATTR10]] {
579+ ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan sub) float @llvm.canonicalize.f32(float nofpclass(sub) [[X]]) #[[ATTR12]]
580+ ; CHECK-NEXT: ret float [[CALL]]
581+ ;
582+ %call = call float @llvm.canonicalize.f32 (float %x )
583+ ret float %call
584+ }
585+
586+ define float @ret_canonicalize_daz_not_sub_not_nzero (float nofpclass(sub nzero) %x ) "denormal-fp-math" ="preserve-sign,preserve-sign" {
587+ ; CHECK-LABEL: define nofpclass(snan sub) float @ret_canonicalize_daz_not_sub_not_nzero
588+ ; CHECK-SAME: (float nofpclass(nzero sub) [[X:%.*]]) #[[ATTR10]] {
589+ ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(snan sub) float @llvm.canonicalize.f32(float nofpclass(nzero sub) [[X]]) #[[ATTR12]]
590+ ; CHECK-NEXT: ret float [[CALL]]
591+ ;
592+ %call = call float @llvm.canonicalize.f32 (float %x )
593+ ret float %call
594+ }
595+
506596;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
507597; TUNIT: {{.*}}
0 commit comments