diff --git a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp --- a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp @@ -2343,7 +2343,7 @@ getIConstantVRegValWithLookThrough(MI.getOperand(2).getReg(), MRI); if (!MaybeIdxVal) // Dynamic case will be selected to register indexing. return true; - const int64_t IdxVal = MaybeIdxVal->Value.getSExtValue(); + const uint64_t IdxVal = MaybeIdxVal->Value.getZExtValue(); Register Dst = MI.getOperand(0).getReg(); Register Vec = MI.getOperand(1).getReg(); @@ -2378,7 +2378,7 @@ if (!MaybeIdxVal) // Dynamic case will be selected to register indexing. return true; - int64_t IdxVal = MaybeIdxVal->Value.getSExtValue(); + const uint64_t IdxVal = MaybeIdxVal->Value.getZExtValue(); Register Dst = MI.getOperand(0).getReg(); Register Vec = MI.getOperand(1).getReg(); Register Ins = MI.getOperand(2).getReg(); diff --git a/llvm/test/CodeGen/AMDGPU/GlobalISel/legalize-extractelement-crash.mir b/llvm/test/CodeGen/AMDGPU/GlobalISel/legalize-extractelement-crash.mir new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/AMDGPU/GlobalISel/legalize-extractelement-crash.mir @@ -0,0 +1,25 @@ +# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py +# RUN: llc -mtriple=amdgcn -run-pass=legalizer -verify-machineinstrs -o - %s | FileCheck %s + +--- +name: f +body: | + bb.0: + ; CHECK-LABEL: name: f + ; CHECK: SI_RETURN + %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 + + %2:_(s32) = G_CONSTANT i32 -1 + %3:_(s32) = G_EXTRACT_VECTOR_ELT %0(<2 x s32>), %2(s32) + %4:_(<2 x s32>) = G_INSERT_VECTOR_ELT %0(<2 x s32>), %3(s32), %2(s32) + + %5:_(s32) = G_CONSTANT i32 2 + %6:_(s32) = G_EXTRACT_VECTOR_ELT %0(<2 x s32>), %5(s32) + %7:_(<2 x s32>) = G_INSERT_VECTOR_ELT %0(<2 x s32>), %6(s32), %5(s32) + + %8:_(s1) = G_CONSTANT i1 1 + %9:_(s32) = G_EXTRACT_VECTOR_ELT %0(<2 x s32>), %8(s1) + %10:_(<2 x s32>) = G_INSERT_VECTOR_ELT %0(<2 x s32>), %9(s32), %8(s1) + + SI_RETURN +...