@@ -157,8 +157,6 @@ class WebAssemblyFastISel final : public FastISel {
157157 MachineMemOperand *MMO);
158158 unsigned maskI1Value (unsigned Reg, const Value *V);
159159 unsigned getRegForI1Value (const Value *V, const BasicBlock *BB, bool &Not);
160- unsigned truncate (unsigned Reg, const Value *V, MVT::SimpleValueType From,
161- MVT::SimpleValueType To);
162160 unsigned zeroExtendToI32 (unsigned Reg, const Value *V,
163161 MVT::SimpleValueType From);
164162 unsigned signExtendToI32 (unsigned Reg, const Value *V,
@@ -521,28 +519,6 @@ unsigned WebAssemblyFastISel::signExtendToI32(unsigned Reg, const Value *V,
521519 return Right;
522520}
523521
524- unsigned WebAssemblyFastISel::truncate (unsigned Reg, const Value *V,
525- MVT::SimpleValueType From,
526- MVT::SimpleValueType To) {
527- if (From == MVT::i64 ) {
528- if (To == MVT::i64 )
529- return copyValue (Reg);
530-
531- if (To == MVT::i1 || To == MVT::i8 || To == MVT::i16 || To == MVT::i32 ) {
532- Register Result = createResultReg (&WebAssembly::I32RegClass);
533- BuildMI (*FuncInfo.MBB , FuncInfo.InsertPt , MIMD,
534- TII.get (WebAssembly::I32_WRAP_I64), Result)
535- .addReg (Reg);
536- return Result;
537- }
538- }
539-
540- if (From == MVT::i32 )
541- return copyValue (Reg);
542-
543- return 0 ;
544- }
545-
546522unsigned WebAssemblyFastISel::zeroExtend (unsigned Reg, const Value *V,
547523 MVT::SimpleValueType From,
548524 MVT::SimpleValueType To) {
@@ -1018,7 +994,28 @@ bool WebAssemblyFastISel::selectTrunc(const Instruction *I) {
1018994 Register In = getRegForValue (Op);
1019995 if (In == 0 )
1020996 return false ;
1021- unsigned Reg = truncate (In, Op, From, To);
997+
998+ auto Truncate = [&](Register Reg) -> unsigned {
999+ if (From == MVT::i64 ) {
1000+ if (To == MVT::i64 )
1001+ return copyValue (Reg);
1002+
1003+ if (To == MVT::i1 || To == MVT::i8 || To == MVT::i16 || To == MVT::i32 ) {
1004+ Register Result = createResultReg (&WebAssembly::I32RegClass);
1005+ BuildMI (*FuncInfo.MBB , FuncInfo.InsertPt , MIMD,
1006+ TII.get (WebAssembly::I32_WRAP_I64), Result)
1007+ .addReg (Reg);
1008+ return Result;
1009+ }
1010+ }
1011+
1012+ if (From == MVT::i32 )
1013+ return copyValue (Reg);
1014+
1015+ return 0 ;
1016+ };
1017+
1018+ unsigned Reg = Truncate (In);
10221019 if (Reg == 0 )
10231020 return false ;
10241021
0 commit comments