180 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			180 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			LLVM
		
	
	
	
| ; RUN: llc -march=mipsel -relocation-model=pic -O0 -fast-isel-abort=1 -mcpu=mips32r2 \
 | |
| ; RUN:     < %s | FileCheck %s
 | |
| ; RUN: llc -march=mipsel -relocation-model=pic -O0 -fast-isel-abort=1 -mcpu=mips32 \
 | |
| ; RUN:     < %s | FileCheck %s
 | |
| ; RUN: llc -march=mipsel -relocation-model=pic -O0 -fast-isel-abort=1 -mcpu=mips32r2 \
 | |
| ; RUN:     < %s | FileCheck %s -check-prefix=mips32r2
 | |
| ; RUN: llc -march=mipsel -relocation-model=pic -O0 -fast-isel-abort=1 -mcpu=mips32 \
 | |
| ; RUN:     < %s | FileCheck %s -check-prefix=mips32
 | |
| 
 | |
| @b2 = global i8 0, align 1
 | |
| @b1 = global i8 1, align 1
 | |
| @uc1 = global i8 0, align 1
 | |
| @uc2 = global i8 -1, align 1
 | |
| @sc1 = global i8 -128, align 1
 | |
| @sc2 = global i8 127, align 1
 | |
| @ss1 = global i16 -32768, align 2
 | |
| @ss2 = global i16 32767, align 2
 | |
| @us1 = global i16 0, align 2
 | |
| @us2 = global i16 -1, align 2
 | |
| @ssi = global i16 0, align 2
 | |
| @ssj = global i16 0, align 2
 | |
| @i = global i32 0, align 4
 | |
| @j = global i32 0, align 4
 | |
| @.str = private unnamed_addr constant [4 x i8] c"%i\0A\00", align 1
 | |
| @.str1 = private unnamed_addr constant [7 x i8] c"%i %i\0A\00", align 1
 | |
| 
 | |
| ; Function Attrs: nounwind
 | |
| define void @_Z3b_iv()  {
 | |
| entry:
 | |
| ; CHECK-LABEL:   .ent  _Z3b_iv
 | |
|   %0 = load i8, i8* @b1, align 1
 | |
|   %tobool = trunc i8 %0 to i1
 | |
|   %frombool = zext i1 %tobool to i8
 | |
|   store i8 %frombool, i8* @b2, align 1
 | |
|   %1 = load i8, i8* @b2, align 1
 | |
|   %tobool1 = trunc i8 %1 to i1
 | |
|   %conv = zext i1 %tobool1 to i32
 | |
|   store i32 %conv, i32* @i, align 4
 | |
| ; CHECK:  lbu  $[[REG1:[0-9]+]], 0(${{[0-9]+}})
 | |
| ; CHECK:  andi  $[[REG2:[0-9]+]], $[[REG1]], 1
 | |
| ; CHECK:  sb  $[[REG2]], 0(${{[0-9]+}})
 | |
| 
 | |
| 
 | |
| 
 | |
|   ret void
 | |
| ; CHECK:   .end  _Z3b_iv
 | |
| }
 | |
| 
 | |
| ; Function Attrs: nounwind
 | |
| define void @_Z4uc_iv()  {
 | |
| entry:
 | |
| ; CHECK-LABEL:  .ent  _Z4uc_iv
 | |
| 
 | |
|   %0 = load i8, i8* @uc1, align 1
 | |
|   %conv = zext i8 %0 to i32
 | |
|   store i32 %conv, i32* @i, align 4
 | |
|   %1 = load i8, i8* @uc2, align 1
 | |
|   %conv1 = zext i8 %1 to i32
 | |
| ; CHECK:   lbu  $[[REG1:[0-9]+]], 0(${{[0-9]+}})
 | |
| ; CHECK:  andi  ${{[0-9]+}}, $[[REG1]], 255
 | |
| 
 | |
|   store i32 %conv1, i32* @j, align 4
 | |
|   ret void
 | |
| ; CHECK:  .end  _Z4uc_iv
 | |
| 
 | |
| }
 | |
| 
 | |
| ; Function Attrs: nounwind
 | |
| define void @_Z4sc_iv()  {
 | |
| entry:
 | |
| ; mips32r2-LABEL:  .ent  _Z4sc_iv
 | |
| ; mips32-LABEL:  .ent  _Z4sc_iv
 | |
| 
 | |
|   %0 = load i8, i8* @sc1, align 1
 | |
|   %conv = sext i8 %0 to i32
 | |
|   store i32 %conv, i32* @i, align 4
 | |
|   %1 = load i8, i8* @sc2, align 1
 | |
|   %conv1 = sext i8 %1 to i32
 | |
|   store i32 %conv1, i32* @j, align 4
 | |
| ; mips32r2:  lbu  $[[REG1:[0-9]+]], 0(${{[0-9]+}})
 | |
| ; mips32r2:  seb  ${{[0-9]+}}, $[[REG1]]
 | |
| ; mips32:  lbu  $[[REG1:[0-9]+]], 0(${{[0-9]+}})
 | |
| ; mips32:    sll  $[[REG2:[0-9]+]], $[[REG1]], 24
 | |
| ; mips32:    sra  ${{[0-9]+}}, $[[REG2]], 24
 | |
| 
 | |
|   ret void
 | |
| ; CHECK:  .end  _Z4sc_iv
 | |
| }
 | |
| 
 | |
| ; Function Attrs: nounwind
 | |
| define void @_Z4us_iv()  {
 | |
| entry:
 | |
| ; CHECK-LABEL:  .ent  _Z4us_iv
 | |
|   %0 = load i16, i16* @us1, align 2
 | |
|   %conv = zext i16 %0 to i32
 | |
|   store i32 %conv, i32* @i, align 4
 | |
|   %1 = load i16, i16* @us2, align 2
 | |
|   %conv1 = zext i16 %1 to i32
 | |
|   store i32 %conv1, i32* @j, align 4
 | |
|   ret void
 | |
| ; CHECK:  lhu  $[[REG1:[0-9]+]], 0(${{[0-9]+}})
 | |
| ; CHECK:  andi  ${{[0-9]+}}, $[[REG1]], 65535
 | |
| ; CHECK:  .end  _Z4us_iv
 | |
| }
 | |
| 
 | |
| ; Function Attrs: nounwind
 | |
| define void @_Z4ss_iv()  {
 | |
| entry:
 | |
| ; mips32r2-LABEL:  .ent  _Z4ss_iv
 | |
| ; mips32=LABEL:  .ent  _Z4ss_iv
 | |
| 
 | |
|   %0 = load i16, i16* @ss1, align 2
 | |
|   %conv = sext i16 %0 to i32
 | |
|   store i32 %conv, i32* @i, align 4
 | |
|   %1 = load i16, i16* @ss2, align 2
 | |
|   %conv1 = sext i16 %1 to i32
 | |
|   store i32 %conv1, i32* @j, align 4
 | |
| ; mips32r2:  lhu  $[[REG1:[0-9]+]], 0(${{[0-9]+}})
 | |
| ; mips32r2:  seh  ${{[0-9]+}}, $[[REG1]]
 | |
| ; mips32:    lhu  $[[REG1:[0-9]+]], 0(${{[0-9]+}})
 | |
| ; mips32:    sll  $[[REG2:[0-9]+]], $[[REG1]], 16
 | |
| ; mips32:    sra  ${{[0-9]+}}, $[[REG2]], 16
 | |
| 
 | |
|   ret void
 | |
| ; CHECK:  .end  _Z4ss_iv
 | |
| }
 | |
| 
 | |
| ; Function Attrs: nounwind
 | |
| define void @_Z4b_ssv()  {
 | |
| entry:
 | |
| ; CHECK-LABEL:  .ent  _Z4b_ssv
 | |
|   %0 = load i8, i8* @b2, align 1
 | |
|   %tobool = trunc i8 %0 to i1
 | |
|   %conv = zext i1 %tobool to i16
 | |
|   store i16 %conv, i16* @ssi, align 2
 | |
|   ret void
 | |
| ; CHECK:  lbu  $[[REG1:[0-9]+]], 0(${{[0-9]+}})
 | |
| ; CHECK:  andi  ${{[0-9]+}}, $[[REG1]], 1
 | |
| ; CHECK:  .end  _Z4b_ssv
 | |
| }
 | |
| 
 | |
| ; Function Attrs: nounwind
 | |
| define void @_Z5uc_ssv()  {
 | |
| entry:
 | |
| ; CHECK-LABEL:  .ent  _Z5uc_ssv
 | |
|   %0 = load i8, i8* @uc1, align 1
 | |
|   %conv = zext i8 %0 to i16
 | |
|   store i16 %conv, i16* @ssi, align 2
 | |
|   %1 = load i8, i8* @uc2, align 1
 | |
|   %conv1 = zext i8 %1 to i16
 | |
| ; CHECK:   lbu  $[[REG1:[0-9]+]], 0(${{[0-9]+}})
 | |
| ; CHECK:  andi  ${{[0-9]+}}, $[[REG1]], 255
 | |
| 
 | |
|   store i16 %conv1, i16* @ssj, align 2
 | |
|   ret void
 | |
| ; CHECK:  .end  _Z5uc_ssv
 | |
| }
 | |
| 
 | |
| ; Function Attrs: nounwind
 | |
| define void @_Z5sc_ssv()  {
 | |
| entry:
 | |
| ; mips32r2-LABEL:  .ent  _Z5sc_ssv
 | |
| ; mips32-LABEL:  .ent  _Z5sc_ssv
 | |
|   %0 = load i8, i8* @sc1, align 1
 | |
|   %conv = sext i8 %0 to i16
 | |
|   store i16 %conv, i16* @ssi, align 2
 | |
|   %1 = load i8, i8* @sc2, align 1
 | |
|   %conv1 = sext i8 %1 to i16
 | |
|   store i16 %conv1, i16* @ssj, align 2
 | |
| ; mips32r2:  lbu  $[[REG1:[0-9]+]], 0(${{[0-9]+}})
 | |
| ; mips32r2:  seb  ${{[0-9]+}}, $[[REG1]]
 | |
| ; mips32:  lbu  $[[REG1:[0-9]+]], 0(${{[0-9]+}})
 | |
| ; mips32:    sll  $[[REG2:[0-9]+]], $[[REG1]], 24
 | |
| ; mips32:    sra  ${{[0-9]+}}, $[[REG2]], 24
 | |
| 
 | |
|   ret void
 | |
| ; CHECK:  .end  _Z5sc_ssv
 | |
| }
 | |
| 
 |