1 ; This file checks support for legalization in MIPS. 2 3 ; REQUIRES: allow_dump 4 5 ; RUN: %if --need=target_MIPS32 \ 6 ; RUN: --command %p2i --filetype=asm --assemble --disassemble \ 7 ; RUN: --target mips32 -i %s --args -O2 \ 8 ; RUN: | %if --need=target_MIPS32 \ 9 ; RUN: --command FileCheck --check-prefix MIPS32 %s 10 11 define internal i32 @legalization(i32 %a, i32 %b, i32 %c, i32 %d, 12 i32 %e, i32 %f) { 13 entry: 14 %a.addr = alloca i8, i32 4, align 4 15 %b.addr = alloca i8, i32 4, align 4 16 %c.addr = alloca i8, i32 4, align 4 17 %d.addr = alloca i8, i32 4, align 4 18 %e.addr = alloca i8, i32 4, align 4 19 %f.addr = alloca i8, i32 4, align 4 20 %r1 = alloca i8, i32 4, align 4 21 %r2 = alloca i8, i32 4, align 4 22 %r3 = alloca i8, i32 4, align 4 23 %a.addr.bc = bitcast i8* %a.addr to i32* 24 store i32 %a, i32* %a.addr.bc, align 1 25 %b.addr.bc = bitcast i8* %b.addr to i32* 26 store i32 %b, i32* %b.addr.bc, align 1 27 %c.addr.bc = bitcast i8* %c.addr to i32* 28 store i32 %c, i32* %c.addr.bc, align 1 29 %d.addr.bc = bitcast i8* %d.addr to i32* 30 store i32 %d, i32* %d.addr.bc, align 1 31 %e.addr.bc = bitcast i8* %e.addr to i32* 32 store i32 %e, i32* %e.addr.bc, align 1 33 %f.addr.bc = bitcast i8* %f.addr to i32* 34 store i32 %f, i32* %f.addr.bc, align 1 35 %a.addr.bc1 = bitcast i8* %a.addr to i32* 36 %0 = load i32, i32* %a.addr.bc1, align 1 37 %f.addr.bc2 = bitcast i8* %f.addr to i32* 38 %1 = load i32, i32* %f.addr.bc2, align 1 39 %add = add i32 %0, %1 40 %r1.bc = bitcast i8* %r1 to i32* 41 store i32 %add, i32* %r1.bc, align 1 42 %b.addr.bc3 = bitcast i8* %b.addr to i32* 43 %2 = load i32, i32* %b.addr.bc3, align 1 44 %e.addr.bc4 = bitcast i8* %e.addr to i32* 45 %3 = load i32, i32* %e.addr.bc4, align 1 46 %add1 = add i32 %2, %3 47 %r2.bc = bitcast i8* %r2 to i32* 48 store i32 %add1, i32* %r2.bc, align 1 49 %r1.bc5 = bitcast i8* %r1 to i32* 50 %4 = load i32, i32* %r1.bc5, align 1 51 %r2.bc6 = bitcast i8* %r2 to i32* 52 %5 = load i32, i32* %r2.bc6, align 1 53 %add2 = add i32 %4, %5 54 %r3.bc = bitcast i8* %r3 to i32* 55 store i32 %add2, i32* %r3.bc, align 1 56 %r3.bc7 = bitcast i8* %r3 to i32* 57 %6 = load i32, i32* %r3.bc7, align 1 58 ret i32 %6 59 } 60 ; MIPS32-LABEL: legalization 61 ; MIPS32: addiu sp,sp,-48 62 ; MIPS32: lw [[ARG_E:.*]],64(sp) 63 ; MIPS32: lw [[ARG_F:.*]],68(sp) 64 ; MIPS32: sw a0,0(sp) 65 ; MIPS32: sw a1,4(sp) 66 ; MIPS32: sw a2,8(sp) 67 ; MIPS32: sw a3,12(sp) 68 ; MIPS32: sw [[ARG_E]],16(sp) 69 ; MIPS32: sw [[ARG_F]],20(sp) 70 ; MIPS32: lw [[TMP_A:.*]],0(sp) 71 ; MIPS32: lw [[TMP_F:.*]],20(sp) 72 ; MIPS32: addu [[ADD1:.*]],[[TMP_A]],[[TMP_F]] 73 ; MIPS32: sw [[ADD1]],24(sp) 74 ; MIPS32: lw [[TMP_B:.*]],4(sp) 75 ; MIPS32: lw [[TMP_E:.*]],16(sp) 76 ; MIPS32: addu [[ADD2:.*]],[[TMP_B]],[[TMP_E]] 77 ; MIPS32: sw [[ADD2]],28(sp) 78 ; MIPS32: lw [[TMP_ADD1:.*]],24(sp) 79 ; MIPS32: lw [[TMP_ADD2:.*]],28(sp) 80 ; MIPS32: addu [[ADD3:.*]],[[TMP_ADD1]],[[TMP_ADD2]] 81 ; MIPS32: sw [[ADD3]],32(sp) 82 ; MIPS32: lw v0,32(sp) 83 ; MIPS32: addiu sp,sp,48 84 ; MIPS32: jr ra 85