// floating point
def : Pat<(f32 fpimm:$val),
- (COPY_TO_REGCLASS (LEASLzii 0, 0, (LOFP32 $val)), F32)>;
+ (EXTRACT_SUBREG (LEASLzii 0, 0, (LOFP32 $val)), sub_f32)>;
def : Pat<(f64 fplozero:$val),
(LEASLzii 0, 0, (HIFP32 $val))>;
def : Pat<(f64 fplomsbzero:$val),
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea %s0, 1092616192
; CHECK-NEXT: stl %s0, 252(, %s11)
-; CHECK-NEXT: lea %s0, 1091567616
-; CHECK-NEXT: lea %s1, stack_callee_float@lo
-; CHECK-NEXT: and %s1, %s1, (32)0
-; CHECK-NEXT: lea.sl %s12, stack_callee_float@hi(, %s1)
-; CHECK-NEXT: lea.sl %s1, 1065353216
-; CHECK-NEXT: lea.sl %s2, 1073741824
-; CHECK-NEXT: lea.sl %s3, 1077936128
-; CHECK-NEXT: lea.sl %s4, 1082130432
-; CHECK-NEXT: lea.sl %s5, 1084227584
-; CHECK-NEXT: lea.sl %s6, 1086324736
-; CHECK-NEXT: lea.sl %s7, 1088421888
-; CHECK-NEXT: lea.sl %s34, 1090519040
-; CHECK-NEXT: stl %s0, 244(, %s11)
-; CHECK-NEXT: or %s0, 0, %s1
-; CHECK-NEXT: or %s1, 0, %s2
-; CHECK-NEXT: or %s2, 0, %s3
-; CHECK-NEXT: or %s3, 0, %s4
-; CHECK-NEXT: or %s4, 0, %s5
-; CHECK-NEXT: or %s5, 0, %s6
-; CHECK-NEXT: or %s6, 0, %s7
-; CHECK-NEXT: or %s7, 0, %s34
+; CHECK-NEXT: lea %s34, 1091567616
+; CHECK-NEXT: lea %s0, stack_callee_float@lo
+; CHECK-NEXT: and %s0, %s0, (32)0
+; CHECK-NEXT: lea.sl %s12, stack_callee_float@hi(, %s0)
+; CHECK-NEXT: lea.sl %s0, 1065353216
+; CHECK-NEXT: lea.sl %s1, 1073741824
+; CHECK-NEXT: lea.sl %s2, 1077936128
+; CHECK-NEXT: lea.sl %s3, 1082130432
+; CHECK-NEXT: lea.sl %s4, 1084227584
+; CHECK-NEXT: lea.sl %s5, 1086324736
+; CHECK-NEXT: lea.sl %s6, 1088421888
+; CHECK-NEXT: lea.sl %s7, 1090519040
+; CHECK-NEXT: stl %s34, 244(, %s11)
+; CHECK-NEXT: # kill: def $sf0 killed $sf0 killed $sx0
+; CHECK-NEXT: # kill: def $sf1 killed $sf1 killed $sx1
+; CHECK-NEXT: # kill: def $sf2 killed $sf2 killed $sx2
+; CHECK-NEXT: # kill: def $sf3 killed $sf3 killed $sx3
+; CHECK-NEXT: # kill: def $sf4 killed $sf4 killed $sx4
+; CHECK-NEXT: # kill: def $sf5 killed $sf5 killed $sx5
+; CHECK-NEXT: # kill: def $sf6 killed $sf6 killed $sx6
+; CHECK-NEXT: # kill: def $sf7 killed $sf7 killed $sx7
; CHECK-NEXT: bsic %s10, (, %s12)
; CHECK-NEXT: or %s11, 0, %s9
%r = tail call float @stack_callee_float(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, float 6.0, float 7.0, float 8.0, float 9.0, float 10.0)
; CHECK-LABEL: f2ull:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, 1593835520
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fcmp.s %s2, %s0, %s1
; CHECK-NEXT: fsub.s %s1, %s0, %s1
; CHECK-NEXT: cvt.d.s %s1, %s1
; CHECK-LABEL: m5f32:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s0, -1063256064
-; CHECK-NEXT: or %s0, 0, %s0
+; CHECK-NEXT: # kill: def $sf0 killed $sf0 killed $sx0
; CHECK-NEXT: or %s11, 0, %s9
ret float -5.000000e+00
}
; CHECK-LABEL: p2p3f32:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s0, 1075000115
-; CHECK-NEXT: or %s0, 0, %s0
+; CHECK-NEXT: # kill: def $sf0 killed $sf0 killed $sx0
; CHECK-NEXT: or %s11, 0, %s9
ret float 0x4002666660000000 ; 2.3
}
; CHECK-LABEL: p128p3f32:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s0, 1124093133
-; CHECK-NEXT: or %s0, 0, %s0
+; CHECK-NEXT: # kill: def $sf0 killed $sf0 killed $sx0
; CHECK-NEXT: or %s11, 0, %s9
ret float 0x40600999A0000000 ; 128.3
}
; CHECK-LABEL: func4:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, 1084227584
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fadd.s %s0, %s0, %s1
; CHECK-NEXT: or %s11, 0, %s9
%r = fadd float %a, 5.000000e+00
; CHECK-LABEL: func7:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, 2139095039
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fadd.s %s0, %s0, %s1
; CHECK-NEXT: or %s11, 0, %s9
%r = fadd float %a, 0x47EFFFFFE0000000
; CHECK-LABEL: func4:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, 1084227584
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fdiv.s %s0, %s0, %s1
; CHECK-NEXT: or %s11, 0, %s9
%r = fdiv float %a, 5.000000e+00
; CHECK-LABEL: func7:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, 2139095039
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fdiv.s %s0, %s0, %s1
; CHECK-NEXT: or %s11, 0, %s9
%r = fdiv float %a, 0x47EFFFFFE0000000
; CHECK-LABEL: func4:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, 1084227584
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fmul.s %s0, %s0, %s1
; CHECK-NEXT: or %s11, 0, %s9
%r = fmul float %a, 5.000000e+00
; CHECK-LABEL: func7:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, 2139095039
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fmul.s %s0, %s0, %s1
; CHECK-NEXT: or %s11, 0, %s9
%r = fmul float %a, 0x47EFFFFFE0000000
; CHECK-LABEL: func4:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, -1063256064
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fadd.s %s0, %s0, %s1
; CHECK-NEXT: or %s11, 0, %s9
%r = fadd float %a, -5.000000e+00
; CHECK-LABEL: func7:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, -8388609
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fadd.s %s0, %s0, %s1
; CHECK-NEXT: or %s11, 0, %s9
%r = fadd float %a, 0xC7EFFFFFE0000000
; CHECK-LABEL: f2ul:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, 1593835520
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fcmp.s %s2, %s0, %s1
; CHECK-NEXT: fsub.s %s1, %s0, %s1
; CHECK-NEXT: cvt.d.s %s1, %s1
define float @selectccoeq(float, float, float, float) {
; CHECK-LABEL: selectccoeq:
; CHECK: .LBB{{[0-9]+}}_2:
-; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: # kill: def $sf3 killed $sf3 def $sx3
; CHECK-NEXT: # kill: def $sf2 killed $sf2 def $sx2
-; CHECK-NEXT: or %s1, 0, %s1
+; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: fcmp.s %s0, %s0, %s1
; CHECK-NEXT: cmov.s.eq %s3, %s2, %s0
; CHECK-NEXT: or %s0, 0, %s3
define float @selectccone(float, float, float, float) {
; CHECK-LABEL: selectccone:
; CHECK: .LBB{{[0-9]+}}_2:
-; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: # kill: def $sf3 killed $sf3 def $sx3
; CHECK-NEXT: # kill: def $sf2 killed $sf2 def $sx2
-; CHECK-NEXT: or %s1, 0, %s1
+; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: fcmp.s %s0, %s0, %s1
; CHECK-NEXT: cmov.s.ne %s3, %s2, %s0
; CHECK-NEXT: or %s0, 0, %s3
define float @selectccogt(float, float, float, float) {
; CHECK-LABEL: selectccogt:
; CHECK: .LBB{{[0-9]+}}_2:
-; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: # kill: def $sf3 killed $sf3 def $sx3
; CHECK-NEXT: # kill: def $sf2 killed $sf2 def $sx2
-; CHECK-NEXT: or %s1, 0, %s1
+; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: fcmp.s %s0, %s0, %s1
; CHECK-NEXT: cmov.s.gt %s3, %s2, %s0
; CHECK-NEXT: or %s0, 0, %s3
define float @selectccoge(float, float, float, float) {
; CHECK-LABEL: selectccoge:
; CHECK: .LBB{{[0-9]+}}_2:
-; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: # kill: def $sf3 killed $sf3 def $sx3
; CHECK-NEXT: # kill: def $sf2 killed $sf2 def $sx2
-; CHECK-NEXT: or %s1, 0, %s1
+; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: fcmp.s %s0, %s0, %s1
; CHECK-NEXT: cmov.s.ge %s3, %s2, %s0
; CHECK-NEXT: or %s0, 0, %s3
define float @selectccolt(float, float, float, float) {
; CHECK-LABEL: selectccolt:
; CHECK: .LBB{{[0-9]+}}_2:
-; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: # kill: def $sf3 killed $sf3 def $sx3
; CHECK-NEXT: # kill: def $sf2 killed $sf2 def $sx2
-; CHECK-NEXT: or %s1, 0, %s1
+; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: fcmp.s %s0, %s0, %s1
; CHECK-NEXT: cmov.s.lt %s3, %s2, %s0
; CHECK-NEXT: or %s0, 0, %s3
define float @selectccole(float, float, float, float) {
; CHECK-LABEL: selectccole:
; CHECK: .LBB{{[0-9]+}}_2:
-; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: # kill: def $sf3 killed $sf3 def $sx3
; CHECK-NEXT: # kill: def $sf2 killed $sf2 def $sx2
-; CHECK-NEXT: or %s1, 0, %s1
+; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: fcmp.s %s0, %s0, %s1
; CHECK-NEXT: cmov.s.le %s3, %s2, %s0
; CHECK-NEXT: or %s0, 0, %s3
define float @selectccueq(float, float, float, float) {
; CHECK-LABEL: selectccueq:
; CHECK: .LBB{{[0-9]+}}_2:
-; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: # kill: def $sf3 killed $sf3 def $sx3
; CHECK-NEXT: # kill: def $sf2 killed $sf2 def $sx2
-; CHECK-NEXT: or %s1, 0, %s1
+; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: fcmp.s %s0, %s0, %s1
; CHECK-NEXT: cmov.s.eqnan %s3, %s2, %s0
; CHECK-NEXT: or %s0, 0, %s3
define float @selectccune(float, float, float, float) {
; CHECK-LABEL: selectccune:
; CHECK: .LBB{{[0-9]+}}_2:
-; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: # kill: def $sf3 killed $sf3 def $sx3
; CHECK-NEXT: # kill: def $sf2 killed $sf2 def $sx2
-; CHECK-NEXT: or %s1, 0, %s1
+; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: fcmp.s %s0, %s0, %s1
; CHECK-NEXT: cmov.s.nenan %s3, %s2, %s0
; CHECK-NEXT: or %s0, 0, %s3
define float @selectccugt(float, float, float, float) {
; CHECK-LABEL: selectccugt:
; CHECK: .LBB{{[0-9]+}}_2:
-; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: # kill: def $sf3 killed $sf3 def $sx3
; CHECK-NEXT: # kill: def $sf2 killed $sf2 def $sx2
-; CHECK-NEXT: or %s1, 0, %s1
+; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: fcmp.s %s0, %s0, %s1
; CHECK-NEXT: cmov.s.gtnan %s3, %s2, %s0
; CHECK-NEXT: or %s0, 0, %s3
define float @selectccuge(float, float, float, float) {
; CHECK-LABEL: selectccuge:
; CHECK: .LBB{{[0-9]+}}_2:
-; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: # kill: def $sf3 killed $sf3 def $sx3
; CHECK-NEXT: # kill: def $sf2 killed $sf2 def $sx2
-; CHECK-NEXT: or %s1, 0, %s1
+; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: fcmp.s %s0, %s0, %s1
; CHECK-NEXT: cmov.s.genan %s3, %s2, %s0
; CHECK-NEXT: or %s0, 0, %s3
define float @selectccult(float, float, float, float) {
; CHECK-LABEL: selectccult:
; CHECK: .LBB{{[0-9]+}}_2:
-; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: # kill: def $sf3 killed $sf3 def $sx3
; CHECK-NEXT: # kill: def $sf2 killed $sf2 def $sx2
-; CHECK-NEXT: or %s1, 0, %s1
+; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: fcmp.s %s0, %s0, %s1
; CHECK-NEXT: cmov.s.ltnan %s3, %s2, %s0
; CHECK-NEXT: or %s0, 0, %s3
define float @selectccule(float, float, float, float) {
; CHECK-LABEL: selectccule:
; CHECK: .LBB{{[0-9]+}}_2:
-; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: # kill: def $sf3 killed $sf3 def $sx3
; CHECK-NEXT: # kill: def $sf2 killed $sf2 def $sx2
-; CHECK-NEXT: or %s1, 0, %s1
+; CHECK-NEXT: lea.sl %s1, 0
; CHECK-NEXT: fcmp.s %s0, %s0, %s1
; CHECK-NEXT: cmov.s.lenan %s3, %s2, %s0
; CHECK-NEXT: or %s0, 0, %s3
; CHECK-LABEL: setccoeq:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, 0
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fcmp.s %s1, %s0, %s1
; CHECK-NEXT: or %s0, 0, (0)1
; CHECK-NEXT: cmov.s.eq %s0, (63)0, %s1
; CHECK-LABEL: setccone:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, 0
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fcmp.s %s1, %s0, %s1
; CHECK-NEXT: or %s0, 0, (0)1
; CHECK-NEXT: cmov.s.ne %s0, (63)0, %s1
; CHECK-LABEL: setccogt:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, 0
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fcmp.s %s1, %s0, %s1
; CHECK-NEXT: or %s0, 0, (0)1
; CHECK-NEXT: cmov.s.gt %s0, (63)0, %s1
; CHECK-LABEL: setccoge:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, 0
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fcmp.s %s1, %s0, %s1
; CHECK-NEXT: or %s0, 0, (0)1
; CHECK-NEXT: cmov.s.ge %s0, (63)0, %s1
; CHECK-LABEL: setccolt:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, 0
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fcmp.s %s1, %s0, %s1
; CHECK-NEXT: or %s0, 0, (0)1
; CHECK-NEXT: cmov.s.lt %s0, (63)0, %s1
; CHECK-LABEL: setccole:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, 0
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fcmp.s %s1, %s0, %s1
; CHECK-NEXT: or %s0, 0, (0)1
; CHECK-NEXT: cmov.s.le %s0, (63)0, %s1
; CHECK-LABEL: setccueq:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, 0
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fcmp.s %s1, %s0, %s1
; CHECK-NEXT: or %s0, 0, (0)1
; CHECK-NEXT: cmov.s.eqnan %s0, (63)0, %s1
; CHECK-LABEL: setccune:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, 0
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fcmp.s %s1, %s0, %s1
; CHECK-NEXT: or %s0, 0, (0)1
; CHECK-NEXT: cmov.s.nenan %s0, (63)0, %s1
; CHECK-LABEL: setccugt:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, 0
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fcmp.s %s1, %s0, %s1
; CHECK-NEXT: or %s0, 0, (0)1
; CHECK-NEXT: cmov.s.gtnan %s0, (63)0, %s1
; CHECK-LABEL: setccuge:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, 0
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fcmp.s %s1, %s0, %s1
; CHECK-NEXT: or %s0, 0, (0)1
; CHECK-NEXT: cmov.s.genan %s0, (63)0, %s1
; CHECK-LABEL: setccult:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, 0
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fcmp.s %s1, %s0, %s1
; CHECK-NEXT: or %s0, 0, (0)1
; CHECK-NEXT: cmov.s.ltnan %s0, (63)0, %s1
; CHECK-LABEL: setccule:
; CHECK: .LBB{{[0-9]+}}_2:
; CHECK-NEXT: lea.sl %s1, 0
-; CHECK-NEXT: or %s1, 0, %s1
; CHECK-NEXT: fcmp.s %s1, %s0, %s1
; CHECK-NEXT: or %s0, 0, (0)1
; CHECK-NEXT: cmov.s.lenan %s0, (63)0, %s1
; CHECK-NEXT: lea %s0, func@lo
; CHECK-NEXT: and %s0, %s0, (32)0
; CHECK-NEXT: lea.sl %s12, func@hi(, %s0)
-; CHECK-NEXT: lea.sl %s0, 1086324736
+; CHECK-NEXT: lea.sl %s6, 1086324736
; CHECK-NEXT: stl %s18, 176(, %s11)
-; CHECK-NEXT: or %s6, 0, %s0
; CHECK-NEXT: or %s0, 0, %s18
+; CHECK-NEXT: # kill: def $sf6 killed $sf6 killed $sx6
; CHECK-NEXT: bsic %s10, (, %s12)
; CHECK-NEXT: or %s0, 0, %s18
; CHECK-NEXT: ld %s18, 48(, %s9) # 8-byte Folded Reload