@@ -80,11 +80,11 @@ define double @olt_inverse(double %x, double %y) {
8080define double @oge (double %x , double %y ) {
8181; STRICT-LABEL: oge:
8282; STRICT: # %bb.0:
83- ; STRICT-NEXT: movapd %xmm1 , %xmm2
84- ; STRICT-NEXT: cmplesd %xmm0 , %xmm2
85- ; STRICT-NEXT: andpd %xmm2, %xmm0
86- ; STRICT-NEXT: andnpd %xmm1 , %xmm2
87- ; STRICT-NEXT: orpd %xmm2 , %xmm0
83+ ; STRICT-NEXT: movapd %xmm0 , %xmm2
84+ ; STRICT-NEXT: movapd %xmm1 , %xmm0
85+ ; STRICT-NEXT: cmplesd %xmm2, %xmm0
86+ ; STRICT-NEXT: blendvpd %xmm0 , %xmm2, %xmm1
87+ ; STRICT-NEXT: movapd %xmm1 , %xmm0
8888; STRICT-NEXT: retq
8989;
9090; RELAX-LABEL: oge:
@@ -100,10 +100,9 @@ define double @ole(double %x, double %y) {
100100; STRICT-LABEL: ole:
101101; STRICT: # %bb.0:
102102; STRICT-NEXT: movapd %xmm0, %xmm2
103- ; STRICT-NEXT: cmplesd %xmm1, %xmm2
104- ; STRICT-NEXT: andpd %xmm2, %xmm0
105- ; STRICT-NEXT: andnpd %xmm1, %xmm2
106- ; STRICT-NEXT: orpd %xmm2, %xmm0
103+ ; STRICT-NEXT: cmplesd %xmm1, %xmm0
104+ ; STRICT-NEXT: blendvpd %xmm0, %xmm2, %xmm1
105+ ; STRICT-NEXT: movapd %xmm1, %xmm0
107106; STRICT-NEXT: retq
108107;
109108; RELAX-LABEL: ole:
@@ -118,11 +117,10 @@ define double @ole(double %x, double %y) {
118117define double @oge_inverse (double %x , double %y ) {
119118; STRICT-LABEL: oge_inverse:
120119; STRICT: # %bb.0:
121- ; STRICT-NEXT: movapd %xmm1, %xmm2
122- ; STRICT-NEXT: cmplesd %xmm0, %xmm2
123- ; STRICT-NEXT: andpd %xmm2, %xmm1
124- ; STRICT-NEXT: andnpd %xmm0, %xmm2
125- ; STRICT-NEXT: orpd %xmm1, %xmm2
120+ ; STRICT-NEXT: movapd %xmm0, %xmm2
121+ ; STRICT-NEXT: movapd %xmm1, %xmm0
122+ ; STRICT-NEXT: cmplesd %xmm2, %xmm0
123+ ; STRICT-NEXT: blendvpd %xmm0, %xmm1, %xmm2
126124; STRICT-NEXT: movapd %xmm2, %xmm0
127125; STRICT-NEXT: retq
128126;
@@ -145,10 +143,8 @@ define double @ole_inverse(double %x, double %y) {
145143; STRICT-LABEL: ole_inverse:
146144; STRICT: # %bb.0:
147145; STRICT-NEXT: movapd %xmm0, %xmm2
148- ; STRICT-NEXT: cmplesd %xmm1, %xmm2
149- ; STRICT-NEXT: andpd %xmm2, %xmm1
150- ; STRICT-NEXT: andnpd %xmm0, %xmm2
151- ; STRICT-NEXT: orpd %xmm1, %xmm2
146+ ; STRICT-NEXT: cmplesd %xmm1, %xmm0
147+ ; STRICT-NEXT: blendvpd %xmm0, %xmm1, %xmm2
152148; STRICT-NEXT: movapd %xmm2, %xmm0
153149; STRICT-NEXT: retq
154150;
@@ -333,10 +329,9 @@ define double @ugt(double %x, double %y) {
333329; STRICT-LABEL: ugt:
334330; STRICT: # %bb.0:
335331; STRICT-NEXT: movapd %xmm0, %xmm2
336- ; STRICT-NEXT: cmpnlesd %xmm1, %xmm2
337- ; STRICT-NEXT: andpd %xmm2, %xmm0
338- ; STRICT-NEXT: andnpd %xmm1, %xmm2
339- ; STRICT-NEXT: orpd %xmm2, %xmm0
332+ ; STRICT-NEXT: cmpnlesd %xmm1, %xmm0
333+ ; STRICT-NEXT: blendvpd %xmm0, %xmm2, %xmm1
334+ ; STRICT-NEXT: movapd %xmm1, %xmm0
340335; STRICT-NEXT: retq
341336;
342337; RELAX-LABEL: ugt:
@@ -351,11 +346,11 @@ define double @ugt(double %x, double %y) {
351346define double @ult (double %x , double %y ) {
352347; STRICT-LABEL: ult:
353348; STRICT: # %bb.0:
354- ; STRICT-NEXT: movapd %xmm1 , %xmm2
355- ; STRICT-NEXT: cmpnlesd %xmm0 , %xmm2
356- ; STRICT-NEXT: andpd %xmm2, %xmm0
357- ; STRICT-NEXT: andnpd %xmm1 , %xmm2
358- ; STRICT-NEXT: orpd %xmm2 , %xmm0
349+ ; STRICT-NEXT: movapd %xmm0 , %xmm2
350+ ; STRICT-NEXT: movapd %xmm1 , %xmm0
351+ ; STRICT-NEXT: cmpnlesd %xmm2, %xmm0
352+ ; STRICT-NEXT: blendvpd %xmm0 , %xmm2, %xmm1
353+ ; STRICT-NEXT: movapd %xmm1 , %xmm0
359354; STRICT-NEXT: retq
360355;
361356; RELAX-LABEL: ult:
@@ -371,10 +366,8 @@ define double @ugt_inverse(double %x, double %y) {
371366; STRICT-LABEL: ugt_inverse:
372367; STRICT: # %bb.0:
373368; STRICT-NEXT: movapd %xmm0, %xmm2
374- ; STRICT-NEXT: cmpnlesd %xmm1, %xmm2
375- ; STRICT-NEXT: andpd %xmm2, %xmm1
376- ; STRICT-NEXT: andnpd %xmm0, %xmm2
377- ; STRICT-NEXT: orpd %xmm1, %xmm2
369+ ; STRICT-NEXT: cmpnlesd %xmm1, %xmm0
370+ ; STRICT-NEXT: blendvpd %xmm0, %xmm1, %xmm2
378371; STRICT-NEXT: movapd %xmm2, %xmm0
379372; STRICT-NEXT: retq
380373;
@@ -396,11 +389,10 @@ define double @ugt_inverse(double %x, double %y) {
396389define double @ult_inverse (double %x , double %y ) {
397390; STRICT-LABEL: ult_inverse:
398391; STRICT: # %bb.0:
399- ; STRICT-NEXT: movapd %xmm1, %xmm2
400- ; STRICT-NEXT: cmpnlesd %xmm0, %xmm2
401- ; STRICT-NEXT: andpd %xmm2, %xmm1
402- ; STRICT-NEXT: andnpd %xmm0, %xmm2
403- ; STRICT-NEXT: orpd %xmm1, %xmm2
392+ ; STRICT-NEXT: movapd %xmm0, %xmm2
393+ ; STRICT-NEXT: movapd %xmm1, %xmm0
394+ ; STRICT-NEXT: cmpnlesd %xmm2, %xmm0
395+ ; STRICT-NEXT: blendvpd %xmm0, %xmm1, %xmm2
404396; STRICT-NEXT: movapd %xmm2, %xmm0
405397; STRICT-NEXT: retq
406398;
@@ -738,12 +730,12 @@ define double @olt_inverse_y(double %x) {
738730define double @oge_y (double %x ) {
739731; STRICT-LABEL: oge_y:
740732; STRICT: # %bb.0:
741- ; STRICT-NEXT: movsd {{.*#+}} xmm1 = [-0.0E+0,0.0E+0]
742- ; STRICT-NEXT: movapd %xmm1, %xmm2
743- ; STRICT-NEXT: cmplesd %xmm0 , %xmm2
744- ; STRICT-NEXT: andpd % xmm2, %xmm0
745- ; STRICT-NEXT: andnpd %xmm1, %xmm2
746- ; STRICT-NEXT: orpd %xmm2, %xmm0
733+ ; STRICT-NEXT: movapd %xmm0, % xmm1
734+ ; STRICT-NEXT: movsd {{.*#+}} xmm0 = [-0.0E+0,0.0E+0]
735+ ; STRICT-NEXT: cmplesd %xmm1 , %xmm0
736+ ; STRICT-NEXT: movapd {{.*#+}} xmm2 = [-0.0E+0,-0.0E+0]
737+ ; STRICT-NEXT: blendvpd %xmm0, %xmm1, %xmm2
738+ ; STRICT-NEXT: movapd %xmm2, %xmm0
747739; STRICT-NEXT: retq
748740;
749741; RELAX-LABEL: oge_y:
@@ -758,12 +750,11 @@ define double @oge_y(double %x) {
758750define double @ole_y (double %x ) {
759751; STRICT-LABEL: ole_y:
760752; STRICT: # %bb.0:
761- ; STRICT-NEXT: movsd {{.*#+}} xmm1 = [-0.0E+0,0.0E+0]
762- ; STRICT-NEXT: movapd %xmm0, %xmm2
763- ; STRICT-NEXT: cmplesd %xmm1, %xmm2
764- ; STRICT-NEXT: andpd %xmm2, %xmm0
765- ; STRICT-NEXT: andnpd %xmm1, %xmm2
766- ; STRICT-NEXT: orpd %xmm2, %xmm0
753+ ; STRICT-NEXT: movapd %xmm0, %xmm1
754+ ; STRICT-NEXT: cmplesd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
755+ ; STRICT-NEXT: movapd {{.*#+}} xmm2 = [-0.0E+0,-0.0E+0]
756+ ; STRICT-NEXT: blendvpd %xmm0, %xmm1, %xmm2
757+ ; STRICT-NEXT: movapd %xmm2, %xmm0
767758; STRICT-NEXT: retq
768759;
769760; RELAX-LABEL: ole_y:
@@ -778,12 +769,10 @@ define double @ole_y(double %x) {
778769define double @oge_inverse_y (double %x ) {
779770; STRICT-LABEL: oge_inverse_y:
780771; STRICT: # %bb.0:
781- ; STRICT-NEXT: movsd {{.*#+}} xmm2 = [-0.0E+0,0.0E+0]
782- ; STRICT-NEXT: movapd %xmm2, %xmm1
783- ; STRICT-NEXT: cmplesd %xmm0, %xmm1
784- ; STRICT-NEXT: andpd %xmm1, %xmm2
785- ; STRICT-NEXT: andnpd %xmm0, %xmm1
786- ; STRICT-NEXT: orpd %xmm2, %xmm1
772+ ; STRICT-NEXT: movapd %xmm0, %xmm1
773+ ; STRICT-NEXT: movsd {{.*#+}} xmm0 = [-0.0E+0,0.0E+0]
774+ ; STRICT-NEXT: cmplesd %xmm1, %xmm0
775+ ; STRICT-NEXT: blendvpd %xmm0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
787776; STRICT-NEXT: movapd %xmm1, %xmm0
788777; STRICT-NEXT: retq
789778;
@@ -806,12 +795,9 @@ define double @oge_inverse_y(double %x) {
806795define double @ole_inverse_y (double %x ) {
807796; STRICT-LABEL: ole_inverse_y:
808797; STRICT: # %bb.0:
809- ; STRICT-NEXT: movsd {{.*#+}} xmm2 = [-0.0E+0,0.0E+0]
810798; STRICT-NEXT: movapd %xmm0, %xmm1
811- ; STRICT-NEXT: cmplesd %xmm2, %xmm1
812- ; STRICT-NEXT: andpd %xmm1, %xmm2
813- ; STRICT-NEXT: andnpd %xmm0, %xmm1
814- ; STRICT-NEXT: orpd %xmm2, %xmm1
799+ ; STRICT-NEXT: cmplesd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
800+ ; STRICT-NEXT: blendvpd %xmm0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
815801; STRICT-NEXT: movapd %xmm1, %xmm0
816802; STRICT-NEXT: retq
817803;
@@ -834,12 +820,11 @@ define double @ole_inverse_y(double %x) {
834820define double @ugt_y (double %x ) {
835821; STRICT-LABEL: ugt_y:
836822; STRICT: # %bb.0:
837- ; STRICT-NEXT: movsd {{.*#+}} xmm1 = [-0.0E+0,0.0E+0]
838- ; STRICT-NEXT: movapd %xmm0, %xmm2
839- ; STRICT-NEXT: cmpnlesd %xmm1, %xmm2
840- ; STRICT-NEXT: andpd %xmm2, %xmm0
841- ; STRICT-NEXT: andnpd %xmm1, %xmm2
842- ; STRICT-NEXT: orpd %xmm2, %xmm0
823+ ; STRICT-NEXT: movapd %xmm0, %xmm1
824+ ; STRICT-NEXT: cmpnlesd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
825+ ; STRICT-NEXT: movapd {{.*#+}} xmm2 = [-0.0E+0,-0.0E+0]
826+ ; STRICT-NEXT: blendvpd %xmm0, %xmm1, %xmm2
827+ ; STRICT-NEXT: movapd %xmm2, %xmm0
843828; STRICT-NEXT: retq
844829;
845830; RELAX-LABEL: ugt_y:
@@ -854,12 +839,12 @@ define double @ugt_y(double %x) {
854839define double @ult_y (double %x ) {
855840; STRICT-LABEL: ult_y:
856841; STRICT: # %bb.0:
857- ; STRICT-NEXT: movsd {{.*#+}} xmm1 = [-0.0E+0,0.0E+0]
858- ; STRICT-NEXT: movapd %xmm1, %xmm2
859- ; STRICT-NEXT: cmpnlesd %xmm0 , %xmm2
860- ; STRICT-NEXT: andpd % xmm2, %xmm0
861- ; STRICT-NEXT: andnpd %xmm1, %xmm2
862- ; STRICT-NEXT: orpd %xmm2, %xmm0
842+ ; STRICT-NEXT: movapd %xmm0, % xmm1
843+ ; STRICT-NEXT: movsd {{.*#+}} xmm0 = [-0.0E+0,0.0E+0]
844+ ; STRICT-NEXT: cmpnlesd %xmm1 , %xmm0
845+ ; STRICT-NEXT: movapd {{.*#+}} xmm2 = [-0.0E+0,-0.0E+0]
846+ ; STRICT-NEXT: blendvpd %xmm0, %xmm1, %xmm2
847+ ; STRICT-NEXT: movapd %xmm2, %xmm0
863848; STRICT-NEXT: retq
864849;
865850; RELAX-LABEL: ult_y:
@@ -874,12 +859,9 @@ define double @ult_y(double %x) {
874859define double @ugt_inverse_y (double %x ) {
875860; STRICT-LABEL: ugt_inverse_y:
876861; STRICT: # %bb.0:
877- ; STRICT-NEXT: movsd {{.*#+}} xmm2 = [-0.0E+0,0.0E+0]
878862; STRICT-NEXT: movapd %xmm0, %xmm1
879- ; STRICT-NEXT: cmpnlesd %xmm2, %xmm1
880- ; STRICT-NEXT: andpd %xmm1, %xmm2
881- ; STRICT-NEXT: andnpd %xmm0, %xmm1
882- ; STRICT-NEXT: orpd %xmm2, %xmm1
863+ ; STRICT-NEXT: cmpnlesd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
864+ ; STRICT-NEXT: blendvpd %xmm0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
883865; STRICT-NEXT: movapd %xmm1, %xmm0
884866; STRICT-NEXT: retq
885867;
@@ -902,12 +884,10 @@ define double @ugt_inverse_y(double %x) {
902884define double @ult_inverse_y (double %x ) {
903885; STRICT-LABEL: ult_inverse_y:
904886; STRICT: # %bb.0:
905- ; STRICT-NEXT: movsd {{.*#+}} xmm2 = [-0.0E+0,0.0E+0]
906- ; STRICT-NEXT: movapd %xmm2, %xmm1
907- ; STRICT-NEXT: cmpnlesd %xmm0, %xmm1
908- ; STRICT-NEXT: andpd %xmm1, %xmm2
909- ; STRICT-NEXT: andnpd %xmm0, %xmm1
910- ; STRICT-NEXT: orpd %xmm2, %xmm1
887+ ; STRICT-NEXT: movapd %xmm0, %xmm1
888+ ; STRICT-NEXT: movsd {{.*#+}} xmm0 = [-0.0E+0,0.0E+0]
889+ ; STRICT-NEXT: cmpnlesd %xmm1, %xmm0
890+ ; STRICT-NEXT: blendvpd %xmm0, {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
911891; STRICT-NEXT: movapd %xmm1, %xmm0
912892; STRICT-NEXT: retq
913893;
0 commit comments