Skip to content

Commit 3897d00

Browse files
Switch to WidenScalarDst & change insert pointer
1 parent d8767dd commit 3897d00

File tree

2 files changed

+15
-23
lines changed

2 files changed

+15
-23
lines changed

llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3386,21 +3386,13 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {
33863386
Observer.changedInstr(MI);
33873387
return Legalized;
33883388
case TargetOpcode::G_FMODF: {
3389+
Observer.changingInstr(MI);
33893390
widenScalarSrc(MI, WideTy, 2, TargetOpcode::G_FPEXT);
33903391

3391-
Register DstFrac = MI.getOperand(0).getReg();
3392-
Register DstInt = MI.getOperand(1).getReg();
3393-
3394-
Register DstFracWide = MRI.createGenericVirtualRegister(WideTy);
3395-
Register DstIntWide = MRI.createGenericVirtualRegister(WideTy);
3396-
Register SrcWide = MI.getOperand(2).getReg();
3397-
3398-
MIRBuilder.buildInstr(TargetOpcode::G_FMODF, {DstFracWide, DstIntWide},
3399-
{SrcWide});
3400-
3401-
MIRBuilder.buildFPTrunc(DstFrac, DstFracWide);
3402-
MIRBuilder.buildFPTrunc(DstInt, DstIntWide);
3403-
MI.eraseFromParent();
3392+
widenScalarDst(MI, WideTy, 1, TargetOpcode::G_FPTRUNC);
3393+
MIRBuilder.setInsertPt(MIRBuilder.getMBB(), --MIRBuilder.getInsertPt());
3394+
widenScalarDst(MI, WideTy, 0, TargetOpcode::G_FPTRUNC);
3395+
Observer.changedInstr(MI);
34043396
return Legalized;
34053397
}
34063398
case TargetOpcode::G_FPOWI:

llvm/test/CodeGen/AArch64/GlobalISel/legalize-modf.mir

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ body: |
1515
; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
1616
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $s0
1717
; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s32) from %stack.0)
18-
; CHECK-NEXT: [[FPTRUNC:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY1]](s32)
19-
; CHECK-NEXT: [[FPTRUNC1:%[0-9]+]]:_(s16) = G_FPTRUNC [[LOAD]](s32)
20-
; CHECK-NEXT: $h0 = COPY [[FPTRUNC]](s16)
21-
; CHECK-NEXT: $h1 = COPY [[FPTRUNC1]](s16)
18+
; CHECK-NEXT: [[FPTRUNC:%[0-9]+]]:_(s16) = G_FPTRUNC [[LOAD]](s32)
19+
; CHECK-NEXT: [[FPTRUNC1:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY1]](s32)
20+
; CHECK-NEXT: $h0 = COPY [[FPTRUNC1]](s16)
21+
; CHECK-NEXT: $h1 = COPY [[FPTRUNC]](s16)
2222
; CHECK-NEXT: RET_ReallyLR implicit $h0, implicit $h1
2323
%0:_(s16) = COPY $h0
2424
%1:_(s16), %2:_(s16) = G_FMODF %0
@@ -64,8 +64,8 @@ body: |
6464
; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
6565
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $s0
6666
; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s32) from %stack.1)
67-
; CHECK-NEXT: [[FPTRUNC:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY1]](s32)
68-
; CHECK-NEXT: [[FPTRUNC1:%[0-9]+]]:_(s16) = G_FPTRUNC [[LOAD]](s32)
67+
; CHECK-NEXT: [[FPTRUNC:%[0-9]+]]:_(s16) = G_FPTRUNC [[LOAD]](s32)
68+
; CHECK-NEXT: [[FPTRUNC1:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY1]](s32)
6969
; CHECK-NEXT: [[FPEXT1:%[0-9]+]]:_(s32) = G_FPEXT [[UV1]](s16)
7070
; CHECK-NEXT: [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0
7171
; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
@@ -75,11 +75,11 @@ body: |
7575
; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
7676
; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $s0
7777
; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX1]](p0) :: (load (s32) from %stack.0)
78-
; CHECK-NEXT: [[FPTRUNC2:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY2]](s32)
79-
; CHECK-NEXT: [[FPTRUNC3:%[0-9]+]]:_(s16) = G_FPTRUNC [[LOAD1]](s32)
78+
; CHECK-NEXT: [[FPTRUNC2:%[0-9]+]]:_(s16) = G_FPTRUNC [[LOAD1]](s32)
79+
; CHECK-NEXT: [[FPTRUNC3:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY2]](s32)
8080
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s16) = G_IMPLICIT_DEF
81-
; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s16>) = G_BUILD_VECTOR [[FPTRUNC]](s16), [[FPTRUNC2]](s16), [[DEF]](s16), [[DEF]](s16)
82-
; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s16>) = G_BUILD_VECTOR [[FPTRUNC1]](s16), [[FPTRUNC3]](s16), [[DEF]](s16), [[DEF]](s16)
81+
; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s16>) = G_BUILD_VECTOR [[FPTRUNC1]](s16), [[FPTRUNC3]](s16), [[DEF]](s16), [[DEF]](s16)
82+
; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s16>) = G_BUILD_VECTOR [[FPTRUNC]](s16), [[FPTRUNC2]](s16), [[DEF]](s16), [[DEF]](s16)
8383
; CHECK-NEXT: $d0 = COPY [[BUILD_VECTOR]](<4 x s16>)
8484
; CHECK-NEXT: $d1 = COPY [[BUILD_VECTOR1]](<4 x s16>)
8585
; CHECK-NEXT: RET_ReallyLR implicit $d0, implicit $d1

0 commit comments

Comments
 (0)