1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --no_x86_scrub_sp 2; RUN: llc -mtriple=i386-linux-gnu -global-isel -verify-machineinstrs < %s | FileCheck %s 3; RUN: llc -mtriple=i386-linux-gnu -regbankselect-greedy -global-isel -verify-machineinstrs < %s | FileCheck %s 4 5;TODO merge with x86-64 tests (many operations not suppored yet) 6 7define i1 @test_load_i1(ptr %p1) { 8; CHECK-LABEL: test_load_i1: 9; CHECK: # %bb.0: 10; CHECK-NEXT: movl 4(%esp), %eax 11; CHECK-NEXT: movzbl (%eax), %eax 12; CHECK-NEXT: retl 13 %r = load i1, ptr %p1 14 ret i1 %r 15} 16 17define i8 @test_load_i8(ptr %p1) { 18; CHECK-LABEL: test_load_i8: 19; CHECK: # %bb.0: 20; CHECK-NEXT: movl 4(%esp), %eax 21; CHECK-NEXT: movzbl (%eax), %eax 22; CHECK-NEXT: retl 23 %r = load i8, ptr %p1 24 ret i8 %r 25} 26 27define i16 @test_load_i16(ptr %p1) { 28; CHECK-LABEL: test_load_i16: 29; CHECK: # %bb.0: 30; CHECK-NEXT: movl 4(%esp), %eax 31; CHECK-NEXT: movzwl (%eax), %eax 32; CHECK-NEXT: retl 33 %r = load i16, ptr %p1 34 ret i16 %r 35} 36 37define i32 @test_load_i32(ptr %p1) { 38; CHECK-LABEL: test_load_i32: 39; CHECK: # %bb.0: 40; CHECK-NEXT: movl 4(%esp), %eax 41; CHECK-NEXT: movl (%eax), %eax 42; CHECK-NEXT: retl 43 %r = load i32, ptr %p1 44 ret i32 %r 45} 46 47define ptr @test_store_i1(i1 %val, ptr %p1) { 48; CHECK-LABEL: test_store_i1: 49; CHECK: # %bb.0: 50; CHECK-NEXT: movl 4(%esp), %ecx 51; CHECK-NEXT: movl 8(%esp), %eax 52; CHECK-NEXT: andb $1, %cl 53; CHECK-NEXT: movb %cl, (%eax) 54; CHECK-NEXT: retl 55 store i1 %val, ptr %p1 56 ret ptr %p1; 57} 58 59define ptr @test_store_i8(i8 %val, ptr %p1) { 60; CHECK-LABEL: test_store_i8: 61; CHECK: # %bb.0: 62; CHECK-NEXT: movl 4(%esp), %ecx 63; CHECK-NEXT: movl 8(%esp), %eax 64; CHECK-NEXT: movb %cl, (%eax) 65; CHECK-NEXT: retl 66 store i8 %val, ptr %p1 67 ret ptr %p1; 68} 69 70define ptr @test_store_i16(i16 %val, ptr %p1) { 71; CHECK-LABEL: test_store_i16: 72; CHECK: # %bb.0: 73; CHECK-NEXT: movl 4(%esp), %ecx 74; CHECK-NEXT: movl 8(%esp), %eax 75; CHECK-NEXT: movw %cx, (%eax) 76; CHECK-NEXT: retl 77 store i16 %val, ptr %p1 78 ret ptr %p1; 79} 80 81define ptr @test_store_i32(i32 %val, ptr %p1) { 82; CHECK-LABEL: test_store_i32: 83; CHECK: # %bb.0: 84; CHECK-NEXT: movl 4(%esp), %ecx 85; CHECK-NEXT: movl 8(%esp), %eax 86; CHECK-NEXT: movl %ecx, (%eax) 87; CHECK-NEXT: retl 88 store i32 %val, ptr %p1 89 ret ptr %p1; 90} 91 92define ptr @test_load_ptr(ptr %ptr1) { 93; CHECK-LABEL: test_load_ptr: 94; CHECK: # %bb.0: 95; CHECK-NEXT: movl 4(%esp), %eax 96; CHECK-NEXT: movl (%eax), %eax 97; CHECK-NEXT: retl 98 %p = load ptr, ptr %ptr1 99 ret ptr %p 100} 101 102define void @test_store_ptr(ptr %ptr1, ptr %a) { 103; CHECK-LABEL: test_store_ptr: 104; CHECK: # %bb.0: 105; CHECK-NEXT: movl 4(%esp), %eax 106; CHECK-NEXT: movl 8(%esp), %ecx 107; CHECK-NEXT: movl %ecx, (%eax) 108; CHECK-NEXT: retl 109 store ptr %a, ptr %ptr1 110 ret void 111} 112