# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
# RUN: llc -mtriple=x86_64-linux-gnu -run-pass=legalizer %s -o - | FileCheck %s

--- |
  define void @test_gep_i8(i8* %addr) {
    %arrayidx = getelementptr i32, i32* undef, i8 5
    ret void
  }

  define void @test_gep_i16(i8* %addr) {
    %arrayidx = getelementptr i32, i32* undef, i16 5
    ret void
  }

  define void @test_gep_i32(i8* %addr) {
    %arrayidx = getelementptr i32, i32* undef, i32 5
    ret void
  }

  define void @test_gep_i64(i8* %addr) {
    %arrayidx = getelementptr i32, i32* undef, i64 5
    ret void
  }
...
---
name:            test_gep_i8
legalized:       false
registers:
  - { id: 0, class: _ }
  - { id: 1, class: _ }
  - { id: 2, class: _ }
body:             |
  bb.1 (%ir-block.0):
    ; CHECK-LABEL: name: test_gep_i8
    ; CHECK: [[DEF:%[0-9]+]]:_(p0) = IMPLICIT_DEF
    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 20
    ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[DEF]], [[C]](s32)
    ; CHECK: G_STORE [[PTR_ADD]](p0), [[DEF]](p0) :: (store (p0) into %ir.addr)
    ; CHECK: RET 0
    %0(p0) = IMPLICIT_DEF
    %1(s8) = G_CONSTANT i8 20
    %2(p0) = G_PTR_ADD %0, %1(s8)
    G_STORE %2, %0 :: (store (p0) into %ir.addr)
    RET 0
...
---
name:            test_gep_i16
legalized:       false
registers:
  - { id: 0, class: _ }
  - { id: 1, class: _ }
  - { id: 2, class: _ }
body:             |
  bb.1 (%ir-block.0):
    ; CHECK-LABEL: name: test_gep_i16
    ; CHECK: [[DEF:%[0-9]+]]:_(p0) = IMPLICIT_DEF
    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 20
    ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[DEF]], [[C]](s32)
    ; CHECK: G_STORE [[PTR_ADD]](p0), [[DEF]](p0) :: (store (p0) into %ir.addr)
    ; CHECK: RET 0
    %0(p0) = IMPLICIT_DEF
    %1(s16) = G_CONSTANT i16 20
    %2(p0) = G_PTR_ADD %0, %1(s16)
    G_STORE %2, %0 :: (store (p0) into %ir.addr)
    RET 0
...
---
name:            test_gep_i32
legalized:       false
registers:
  - { id: 0, class: _ }
  - { id: 1, class: _ }
  - { id: 2, class: _ }
body:             |
  bb.1 (%ir-block.0):
    ; CHECK-LABEL: name: test_gep_i32
    ; CHECK: [[DEF:%[0-9]+]]:_(p0) = IMPLICIT_DEF
    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 20
    ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[DEF]], [[C]](s32)
    ; CHECK: G_STORE [[PTR_ADD]](p0), [[DEF]](p0) :: (store (p0) into %ir.addr)
    ; CHECK: RET 0
    %0(p0) = IMPLICIT_DEF
    %1(s32) = G_CONSTANT i32 20
    %2(p0) = G_PTR_ADD %0, %1(s32)
    G_STORE %2, %0 :: (store (p0) into %ir.addr)
    RET 0
...
---
name:            test_gep_i64
legalized:       false
registers:
  - { id: 0, class: _ }
  - { id: 1, class: _ }
  - { id: 2, class: _ }
body:             |
  bb.1 (%ir-block.0):
    ; CHECK-LABEL: name: test_gep_i64
    ; CHECK: [[DEF:%[0-9]+]]:_(p0) = IMPLICIT_DEF
    ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 20
    ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[DEF]], [[C]](s64)
    ; CHECK: G_STORE [[PTR_ADD]](p0), [[DEF]](p0) :: (store (p0) into %ir.addr)
    ; CHECK: RET 0
    %0(p0) = IMPLICIT_DEF
    %1(s64) = G_CONSTANT i64 20
    %2(p0) = G_PTR_ADD %0, %1(s64)
    G_STORE %2, %0 :: (store (p0) into %ir.addr)
    RET 0
...
