diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-07-08 13:48:06 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-07-08 13:48:06 +0000 |
commit | bd791b57f8d76fa99048d8d605b7b749bb8c83fc (patch) | |
tree | e3185f5febd7f1f03a907f108157474e0d5bb2c1 /llvm/lib | |
parent | 214f67ece54f193f0b561c71e12092255b2edb5c (diff) | |
download | bcm5719-llvm-bd791b57f8d76fa99048d8d605b7b749bb8c83fc.tar.gz bcm5719-llvm-bd791b57f8d76fa99048d8d605b7b749bb8c83fc.zip |
GlobalISel: widenScalar for G_BUILD_VECTOR
llvm-svn: 365320
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp index 8e26b8a120e..f44cdefe309 100644 --- a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp +++ b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp @@ -1398,6 +1398,25 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) { widenScalarDst(MI, WideTy, 0); Observer.changedInstr(MI); return Legalized; + case TargetOpcode::G_BUILD_VECTOR: { + Observer.changingInstr(MI); + + const LLT WideEltTy = TypeIdx == 1 ? WideTy : WideTy.getElementType(); + for (int I = 1, E = MI.getNumOperands(); I != E; ++I) + widenScalarSrc(MI, WideEltTy, I, TargetOpcode::G_ANYEXT); + + // Avoid changing the result vector type if the source element type was + // requested. + if (TypeIdx == 1) { + auto &TII = *MI.getMF()->getSubtarget().getInstrInfo(); + MI.setDesc(TII.get(TargetOpcode::G_BUILD_VECTOR_TRUNC)); + } else { + widenScalarDst(MI, WideTy, 0); + } + + Observer.changedInstr(MI); + return Legalized; + } } } |