137 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=x86_64-linux-gnu -global-isel -verify-machineinstrs < %s -o - | FileCheck %s --check-prefix=X64_GISEL3; RUN: llc -mtriple=x86_64-linux-gnu -verify-machineinstrs < %s -o - | FileCheck %s --check-prefix=X644 5define ptr @test_gep_i8(ptr%arr, i8 %ind) {6; X64_GISEL-LABEL: test_gep_i8:7; X64_GISEL: # %bb.0:8; X64_GISEL-NEXT: # kill: def $esi killed $esi def $rsi9; X64_GISEL-NEXT: shlq $56, %rsi10; X64_GISEL-NEXT: sarq $56, %rsi11; X64_GISEL-NEXT: imulq $4, %rsi, %rax12; X64_GISEL-NEXT: addq %rdi, %rax13; X64_GISEL-NEXT: retq14;15; X64-LABEL: test_gep_i8:16; X64: # %bb.0:17; X64-NEXT: # kill: def $esi killed $esi def $rsi18; X64-NEXT: movsbq %sil, %rax19; X64-NEXT: leaq (%rdi,%rax,4), %rax20; X64-NEXT: retq21 %arrayidx = getelementptr i32, ptr %arr, i8 %ind22 ret ptr %arrayidx23}24 25define ptr @test_gep_i8_const(ptr%arr) {26; X64_GISEL-LABEL: test_gep_i8_const:27; X64_GISEL: # %bb.0:28; X64_GISEL-NEXT: movl $80, %eax29; X64_GISEL-NEXT: addq %rdi, %rax30; X64_GISEL-NEXT: retq31;32; X64-LABEL: test_gep_i8_const:33; X64: # %bb.0:34; X64-NEXT: leaq 80(%rdi), %rax35; X64-NEXT: retq36 %arrayidx = getelementptr i32, ptr %arr, i8 2037 ret ptr %arrayidx38}39 40define ptr @test_gep_i16(ptr%arr, i16 %ind) {41; X64_GISEL-LABEL: test_gep_i16:42; X64_GISEL: # %bb.0:43; X64_GISEL-NEXT: # kill: def $esi killed $esi def $rsi44; X64_GISEL-NEXT: shlq $48, %rsi45; X64_GISEL-NEXT: sarq $48, %rsi46; X64_GISEL-NEXT: imulq $4, %rsi, %rax47; X64_GISEL-NEXT: addq %rdi, %rax48; X64_GISEL-NEXT: retq49;50; X64-LABEL: test_gep_i16:51; X64: # %bb.0:52; X64-NEXT: # kill: def $esi killed $esi def $rsi53; X64-NEXT: movswq %si, %rax54; X64-NEXT: leaq (%rdi,%rax,4), %rax55; X64-NEXT: retq56 %arrayidx = getelementptr i32, ptr %arr, i16 %ind57 ret ptr %arrayidx58}59 60define ptr @test_gep_i16_const(ptr%arr) {61; X64_GISEL-LABEL: test_gep_i16_const:62; X64_GISEL: # %bb.0:63; X64_GISEL-NEXT: movl $80, %eax64; X64_GISEL-NEXT: addq %rdi, %rax65; X64_GISEL-NEXT: retq66;67; X64-LABEL: test_gep_i16_const:68; X64: # %bb.0:69; X64-NEXT: leaq 80(%rdi), %rax70; X64-NEXT: retq71 %arrayidx = getelementptr i32, ptr %arr, i16 2072 ret ptr %arrayidx73}74 75define ptr @test_gep_i32(ptr%arr, i32 %ind) {76; X64_GISEL-LABEL: test_gep_i32:77; X64_GISEL: # %bb.0:78; X64_GISEL-NEXT: movslq %esi, %rax79; X64_GISEL-NEXT: imulq $4, %rax, %rax80; X64_GISEL-NEXT: addq %rdi, %rax81; X64_GISEL-NEXT: retq82;83; X64-LABEL: test_gep_i32:84; X64: # %bb.0:85; X64-NEXT: movslq %esi, %rax86; X64-NEXT: leaq (%rdi,%rax,4), %rax87; X64-NEXT: retq88 %arrayidx = getelementptr i32, ptr %arr, i32 %ind89 ret ptr %arrayidx90}91 92define ptr @test_gep_i32_const(ptr%arr) {93; X64_GISEL-LABEL: test_gep_i32_const:94; X64_GISEL: # %bb.0:95; X64_GISEL-NEXT: movl $20, %eax96; X64_GISEL-NEXT: addq %rdi, %rax97; X64_GISEL-NEXT: retq98;99; X64-LABEL: test_gep_i32_const:100; X64: # %bb.0:101; X64-NEXT: leaq 20(%rdi), %rax102; X64-NEXT: retq103 %arrayidx = getelementptr i32, ptr %arr, i32 5104 ret ptr %arrayidx105}106 107define ptr @test_gep_i64(ptr%arr, i64 %ind) {108; X64_GISEL-LABEL: test_gep_i64:109; X64_GISEL: # %bb.0:110; X64_GISEL-NEXT: imulq $4, %rsi, %rax111; X64_GISEL-NEXT: addq %rdi, %rax112; X64_GISEL-NEXT: retq113;114; X64-LABEL: test_gep_i64:115; X64: # %bb.0:116; X64-NEXT: leaq (%rdi,%rsi,4), %rax117; X64-NEXT: retq118 %arrayidx = getelementptr i32, ptr %arr, i64 %ind119 ret ptr %arrayidx120}121 122define ptr @test_gep_i64_const(ptr%arr) {123; X64_GISEL-LABEL: test_gep_i64_const:124; X64_GISEL: # %bb.0:125; X64_GISEL-NEXT: movl $20, %eax126; X64_GISEL-NEXT: addq %rdi, %rax127; X64_GISEL-NEXT: retq128;129; X64-LABEL: test_gep_i64_const:130; X64: # %bb.0:131; X64-NEXT: leaq 20(%rdi), %rax132; X64-NEXT: retq133 %arrayidx = getelementptr i32, ptr %arr, i64 5134 ret ptr %arrayidx135}136 137