137 lines · plain
1; RUN: llc -mtriple=mips < %s | FileCheck %s -check-prefixes=ALL,MIPS2; RUN: llc -mtriple=mips < %s -mattr=+micromips | FileCheck %s -check-prefixes=ALL,MM3 4; Test the patterns used for constant materialization.5 6; Constants generated using li167define i32 @Li16LowBoundary() {8entry:9 ; ALL-LABEL: Li16LowBoundary:10 ; MIPS: addiu $2, $zero, -111 ; MM: li16 $2, -112 ; ALL-NOT: lui13 ; ALL-NOT: ori14 ; MIPS-NOT: li1615 ; MM-NOT: addiu16 17 ret i32 -118}19 20define i32 @Li16HighBoundary() {21entry:22 ; ALL-LABEL: Li16HighBoundary:23 ; MIPS: addiu $2, $zero, 12624 ; MM: li16 $2, 12625 ; ALL-NOT: lui26 ; ALL-NOT: ori27 ; MM-NOT: addiu28 ; MIPS-NOT: li1629 30 ret i32 12631}32 33; Constants generated using addiu34define i32 @AddiuLowBoundary() {35entry:36 ; ALL-LABEL: AddiuLowBoundary:37 ; ALL: addiu $2, $zero, -3276838 ; ALL-NOT: lui39 ; ALL-NOT: ori40 ; ALL-NOT: li1641 42 ret i32 -3276843}44 45define i32 @AddiuZero() {46entry:47 ; ALL-LABEL: AddiuZero:48 ; MIPS: addiu $2, $zero, 049 ; MM: li16 $2, 050 ; ALL-NOT: lui51 ; ALL-NOT: ori52 ; MIPS-NOT: li1653 ; MM-NOT: addiu54 55 ret i32 056}57 58define i32 @AddiuHighBoundary() {59entry:60 ; ALL-LABEL: AddiuHighBoundary:61 ; ALL: addiu $2, $zero, 3276762 ; ALL-NOT: lui63 ; ALL-NOT: ori64 ; ALL-NOT: li1665 66 ret i32 3276767}68 69; Constants generated using ori70define i32 @OriLowBoundary() {71entry:72 ; ALL-LABEL: OriLowBoundary:73 ; ALL: ori $2, $zero, 3276874 ; ALL-NOT: addiu75 ; ALL-NOT: lui76 ; ALL-NOT: li1677 78 ret i32 3276879}80 81define i32 @OriHighBoundary() {82entry:83 ; ALL-LABEL: OriHighBoundary:84 ; ALL: ori $2, $zero, 6553585 ; ALL-NOT: addiu86 ; ALL-NOT: lui87 ; ALL-NOT: li1688 89 ret i32 6553590}91 92; Constants generated using lui93define i32 @LuiPositive() {94entry:95 ; ALL-LABEL: LuiPositive:96 ; ALL: lui $2, 197 ; ALL-NOT: addiu98 ; ALL-NOT: ori99 ; ALL-NOT: li16100 101 ret i32 65536102}103 104define i32 @LuiNegative() {105entry:106 ; ALL-LABEL: LuiNegative:107 ; ALL: lui $2, 65535108 ; ALL-NOT: addiu109 ; ALL-NOT: ori110 ; ALL-NOT: li16111 112 ret i32 -65536113}114 115; Constants generated using a combination of lui and ori116define i32 @LuiWithLowBitsSet() {117entry:118 ; ALL-LABEL: LuiWithLowBitsSet:119 ; ALL: lui $1, 1120 ; ALL: ori $2, $1, 1121 ; ALL-NOT: addiu122 ; ALL-NOT: li16123 124 ret i32 65537125}126 127define i32 @BelowAddiuLowBoundary() {128entry:129 ; ALL-LABEL: BelowAddiuLowBoundary:130 ; ALL: lui $1, 65535131 ; ALL: ori $2, $1, 32767132 ; ALL-NOT: addiu133 ; ALL-NOT: li16134 135 ret i32 -32769136}137