396 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -O2 \3; RUN: -ppc-asm-full-reg-names -mcpu=pwr10 < %s | FileCheck %s \4; RUN: --check-prefixes=CHECK,CHECK-LE5; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -O2 \6; RUN: -ppc-asm-full-reg-names -mcpu=pwr10 < %s | FileCheck %s \7; RUN: --check-prefixes=CHECK,CHECK-BE8 9; This file does not contain many test cases involving comparisons and logical10; comparisons (cmplwi, cmpldi). This is because alternative code is generated11; when there is a compare (logical or not), followed by a sign or zero extend.12; This codegen will be re-evaluated at a later time on whether or not it should13; be emitted on P10.14 15@globalVal = common dso_local local_unnamed_addr global i8 0, align 116@globalVal2 = common dso_local local_unnamed_addr global i32 0, align 417@globalVal3 = common dso_local local_unnamed_addr global i64 0, align 818@globalVal4 = common dso_local local_unnamed_addr global i16 0, align 219 20define dso_local signext i32 @setnbcr1(i8 %a) {21; CHECK-LABEL: setnbcr1:22; CHECK: # %bb.0: # %entry23; CHECK-NEXT: andi. r3, r3, 25524; CHECK-NEXT: setnbcr r3, eq25; CHECK-NEXT: blr26entry:27 %cmp = icmp uge i8 %a, 128 %conv = sext i1 %cmp to i3229 ret i32 %conv30}31 32define dso_local signext i32 @setnbcr2(i32 %a) {33; CHECK-LABEL: setnbcr2:34; CHECK: # %bb.0: # %entry35; CHECK-NEXT: cmpwi r3, 036; CHECK-NEXT: setnbcr r3, eq37; CHECK-NEXT: blr38entry:39 %cmp = icmp uge i32 %a, 140 %conv = sext i1 %cmp to i3241 ret i32 %conv42}43 44define dso_local signext i32 @setnbcr3(i64 %a) {45; CHECK-LABEL: setnbcr3:46; CHECK: # %bb.0: # %entry47; CHECK-NEXT: cmpdi r3, 048; CHECK-NEXT: setnbcr r3, eq49; CHECK-NEXT: blr50entry:51 %cmp = icmp uge i64 %a, 152 %conv = sext i1 %cmp to i3253 ret i32 %conv54}55 56define dso_local signext i32 @setnbcr4(i16 %a) {57; CHECK-LABEL: setnbcr4:58; CHECK: # %bb.0: # %entry59; CHECK-NEXT: andi. r3, r3, 6553560; CHECK-NEXT: setnbcr r3, eq61; CHECK-NEXT: blr62entry:63 %cmp = icmp uge i16 %a, 164 %conv = sext i1 %cmp to i3265 ret i32 %conv66}67 68define signext i64 @setnbcr5(i8 %a) {69; CHECK-LABEL: setnbcr5:70; CHECK: # %bb.0: # %entry71; CHECK-NEXT: andi. r3, r3, 25572; CHECK-NEXT: setnbcr r3, eq73; CHECK-NEXT: blr74entry:75 %cmp = icmp uge i8 %a, 176 %conv = sext i1 %cmp to i6477 ret i64 %conv78}79 80define signext i64 @setnbcr6(i32 %a) {81; CHECK-LABEL: setnbcr6:82; CHECK: # %bb.0: # %entry83; CHECK-NEXT: cmpwi r3, 084; CHECK-NEXT: setnbcr r3, eq85; CHECK-NEXT: blr86entry:87 %cmp = icmp uge i32 %a, 188 %conv = sext i1 %cmp to i6489 ret i64 %conv90}91 92define signext i64 @setnbcr7(i64 %a) {93; CHECK-LABEL: setnbcr7:94; CHECK: # %bb.0: # %entry95; CHECK-NEXT: cmpdi r3, 096; CHECK-NEXT: setnbcr r3, eq97; CHECK-NEXT: blr98entry:99 %cmp = icmp uge i64 %a, 1100 %conv = sext i1 %cmp to i64101 ret i64 %conv102}103 104define signext i64 @setnbcr8(i16 %a) {105; CHECK-LABEL: setnbcr8:106; CHECK: # %bb.0: # %entry107; CHECK-NEXT: andi. r3, r3, 65535108; CHECK-NEXT: setnbcr r3, eq109; CHECK-NEXT: blr110entry:111 %cmp = icmp uge i16 %a, 1112 %conv = sext i1 %cmp to i64113 ret i64 %conv114}115 116define dso_local void @setnbcr9(i8 %a) {117; CHECK-LE-LABEL: setnbcr9:118; CHECK-LE: # %bb.0: # %entry119; CHECK-LE-NEXT: andi. r3, r3, 255120; CHECK-LE-NEXT: setnbcr r3, eq121; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 1122; CHECK-LE-NEXT: blr123;124; CHECK-BE-LABEL: setnbcr9:125; CHECK-BE: # %bb.0: # %entry126; CHECK-BE-NEXT: andi. r3, r3, 255127; CHECK-BE-NEXT: addis r4, r2, globalVal@toc@ha128; CHECK-BE-NEXT: setnbcr r3, eq129; CHECK-BE-NEXT: stb r3, globalVal@toc@l(r4)130; CHECK-BE-NEXT: blr131entry:132 %cmp = icmp uge i8 %a, 1133 %conv1 = sext i1 %cmp to i8134 store i8 %conv1, ptr @globalVal, align 1135 ret void136}137 138define dso_local void @setnbcr10(i32 %a) {139; CHECK-LE-LABEL: setnbcr10:140; CHECK-LE: # %bb.0: # %entry141; CHECK-LE-NEXT: cmpwi r3, 0142; CHECK-LE-NEXT: setnbcr r3, eq143; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1144; CHECK-LE-NEXT: blr145;146; CHECK-BE-LABEL: setnbcr10:147; CHECK-BE: # %bb.0: # %entry148; CHECK-BE-NEXT: cmpwi r3, 0149; CHECK-BE-NEXT: addis r4, r2, globalVal2@toc@ha150; CHECK-BE-NEXT: setnbcr r3, eq151; CHECK-BE-NEXT: stw r3, globalVal2@toc@l(r4)152; CHECK-BE-NEXT: blr153entry:154 %cmp = icmp uge i32 %a, 1155 %conv1 = sext i1 %cmp to i32156 store i32 %conv1, ptr @globalVal2, align 4157 ret void158}159 160define dso_local void @setnbcr11(i64 %a) {161; CHECK-LE-LABEL: setnbcr11:162; CHECK-LE: # %bb.0: # %entry163; CHECK-LE-NEXT: cmpdi r3, 0164; CHECK-LE-NEXT: setnbcr r3, eq165; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1166; CHECK-LE-NEXT: blr167;168; CHECK-BE-LABEL: setnbcr11:169; CHECK-BE: # %bb.0: # %entry170; CHECK-BE-NEXT: cmpdi r3, 0171; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha172; CHECK-BE-NEXT: setnbcr r3, eq173; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4)174; CHECK-BE-NEXT: blr175entry:176 %cmp = icmp uge i64 %a, 1177 %conv1 = sext i1 %cmp to i64178 store i64 %conv1, ptr @globalVal3, align 8179 ret void180}181 182define dso_local void @setnbcr12(i16 %a) {183; CHECK-LE-LABEL: setnbcr12:184; CHECK-LE: # %bb.0: # %entry185; CHECK-LE-NEXT: andi. r3, r3, 65535186; CHECK-LE-NEXT: setnbcr r3, eq187; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1188; CHECK-LE-NEXT: blr189;190; CHECK-BE-LABEL: setnbcr12:191; CHECK-BE: # %bb.0: # %entry192; CHECK-BE-NEXT: andi. r3, r3, 65535193; CHECK-BE-NEXT: addis r4, r2, globalVal4@toc@ha194; CHECK-BE-NEXT: setnbcr r3, eq195; CHECK-BE-NEXT: sth r3, globalVal4@toc@l(r4)196; CHECK-BE-NEXT: blr197entry:198 %cmp = icmp uge i16 %a, 1199 %conv1 = sext i1 %cmp to i16200 store i16 %conv1, ptr @globalVal4, align 2201 ret void202}203 204define dso_local signext i32 @setnbcr13(i8 %a) {205; CHECK-LABEL: setnbcr13:206; CHECK: # %bb.0: # %entry207; CHECK-NEXT: clrlwi r3, r3, 24208; CHECK-NEXT: cmpwi r3, 1209; CHECK-NEXT: setnbcr r3, eq210; CHECK-NEXT: blr211entry:212 %cmp = icmp ne i8 %a, 1213 %conv = sext i1 %cmp to i32214 ret i32 %conv215}216 217define dso_local signext i32 @setnbcr14(i32 %a) {218; CHECK-LABEL: setnbcr14:219; CHECK: # %bb.0: # %entry220; CHECK-NEXT: cmpwi r3, 1221; CHECK-NEXT: setnbcr r3, eq222; CHECK-NEXT: blr223entry:224 %cmp = icmp ne i32 %a, 1225 %conv = sext i1 %cmp to i32226 ret i32 %conv227}228 229define dso_local signext i32 @setnbcr15(i64 %a) {230; CHECK-LABEL: setnbcr15:231; CHECK: # %bb.0: # %entry232; CHECK-NEXT: cmpdi r3, 1233; CHECK-NEXT: setnbcr r3, eq234; CHECK-NEXT: blr235entry:236 %cmp = icmp ne i64 %a, 1237 %conv = sext i1 %cmp to i32238 ret i32 %conv239}240 241define dso_local signext i32 @setnbcr16(i16 %a) {242; CHECK-LABEL: setnbcr16:243; CHECK: # %bb.0: # %entry244; CHECK-NEXT: clrlwi r3, r3, 16245; CHECK-NEXT: cmpwi r3, 1246; CHECK-NEXT: setnbcr r3, eq247; CHECK-NEXT: blr248entry:249 %cmp = icmp ne i16 %a, 1250 %conv = sext i1 %cmp to i32251 ret i32 %conv252}253 254define signext i64 @setnbcr17(i8 %a) {255; CHECK-LABEL: setnbcr17:256; CHECK: # %bb.0: # %entry257; CHECK-NEXT: clrlwi r3, r3, 24258; CHECK-NEXT: cmpwi r3, 1259; CHECK-NEXT: setnbcr r3, eq260; CHECK-NEXT: blr261entry:262 %cmp = icmp ne i8 %a, 1263 %conv = sext i1 %cmp to i64264 ret i64 %conv265}266 267define signext i64 @setnbcr18(i32 %a) {268; CHECK-LABEL: setnbcr18:269; CHECK: # %bb.0: # %entry270; CHECK-NEXT: cmpwi r3, 1271; CHECK-NEXT: setnbcr r3, eq272; CHECK-NEXT: blr273entry:274 %cmp = icmp ne i32 %a, 1275 %conv = sext i1 %cmp to i64276 ret i64 %conv277}278 279define signext i64 @setnbcr19(i64 %a) {280; CHECK-LABEL: setnbcr19:281; CHECK: # %bb.0: # %entry282; CHECK-NEXT: cmpdi r3, 1283; CHECK-NEXT: setnbcr r3, eq284; CHECK-NEXT: blr285entry:286 %cmp = icmp ne i64 %a, 1287 %conv = sext i1 %cmp to i64288 ret i64 %conv289}290 291define signext i64 @setnbcr20(i16 %a) {292; CHECK-LABEL: setnbcr20:293; CHECK: # %bb.0: # %entry294; CHECK-NEXT: clrlwi r3, r3, 16295; CHECK-NEXT: cmpwi r3, 1296; CHECK-NEXT: setnbcr r3, eq297; CHECK-NEXT: blr298entry:299 %cmp = icmp ne i16 %a, 1300 %conv = sext i1 %cmp to i64301 ret i64 %conv302}303 304define dso_local void @setnbcr21(i8 %a) {305; CHECK-LE-LABEL: setnbcr21:306; CHECK-LE: # %bb.0: # %entry307; CHECK-LE-NEXT: clrlwi r3, r3, 24308; CHECK-LE-NEXT: cmpwi r3, 1309; CHECK-LE-NEXT: setnbcr r3, eq310; CHECK-LE-NEXT: pstb r3, globalVal@PCREL(0), 1311; CHECK-LE-NEXT: blr312;313; CHECK-BE-LABEL: setnbcr21:314; CHECK-BE: # %bb.0: # %entry315; CHECK-BE-NEXT: clrlwi r3, r3, 24316; CHECK-BE-NEXT: addis r4, r2, globalVal@toc@ha317; CHECK-BE-NEXT: cmpwi r3, 1318; CHECK-BE-NEXT: setnbcr r3, eq319; CHECK-BE-NEXT: stb r3, globalVal@toc@l(r4)320; CHECK-BE-NEXT: blr321entry:322 %cmp = icmp ne i8 %a, 1323 %conv1 = sext i1 %cmp to i8324 store i8 %conv1, ptr @globalVal, align 1325 ret void326}327 328define dso_local void @setnbcr22(i32 %a) {329; CHECK-LE-LABEL: setnbcr22:330; CHECK-LE: # %bb.0: # %entry331; CHECK-LE-NEXT: cmpwi r3, 1332; CHECK-LE-NEXT: setnbcr r3, eq333; CHECK-LE-NEXT: pstw r3, globalVal2@PCREL(0), 1334; CHECK-LE-NEXT: blr335;336; CHECK-BE-LABEL: setnbcr22:337; CHECK-BE: # %bb.0: # %entry338; CHECK-BE-NEXT: cmpwi r3, 1339; CHECK-BE-NEXT: addis r4, r2, globalVal2@toc@ha340; CHECK-BE-NEXT: setnbcr r3, eq341; CHECK-BE-NEXT: stw r3, globalVal2@toc@l(r4)342; CHECK-BE-NEXT: blr343entry:344 %cmp = icmp ne i32 %a, 1345 %conv1 = sext i1 %cmp to i32346 store i32 %conv1, ptr @globalVal2, align 4347 ret void348}349 350define dso_local void @setnbcr23(i64 %a) {351; CHECK-LE-LABEL: setnbcr23:352; CHECK-LE: # %bb.0: # %entry353; CHECK-LE-NEXT: cmpdi r3, 1354; CHECK-LE-NEXT: setnbcr r3, eq355; CHECK-LE-NEXT: pstd r3, globalVal3@PCREL(0), 1356; CHECK-LE-NEXT: blr357;358; CHECK-BE-LABEL: setnbcr23:359; CHECK-BE: # %bb.0: # %entry360; CHECK-BE-NEXT: cmpdi r3, 1361; CHECK-BE-NEXT: addis r4, r2, globalVal3@toc@ha362; CHECK-BE-NEXT: setnbcr r3, eq363; CHECK-BE-NEXT: std r3, globalVal3@toc@l(r4)364; CHECK-BE-NEXT: blr365entry:366 %cmp = icmp ne i64 %a, 1367 %conv1 = sext i1 %cmp to i64368 store i64 %conv1, ptr @globalVal3, align 8369 ret void370}371 372define dso_local void @setnbcr24(i16 %a) {373; CHECK-LE-LABEL: setnbcr24:374; CHECK-LE: # %bb.0: # %entry375; CHECK-LE-NEXT: clrlwi r3, r3, 16376; CHECK-LE-NEXT: cmpwi r3, 1377; CHECK-LE-NEXT: setnbcr r3, eq378; CHECK-LE-NEXT: psth r3, globalVal4@PCREL(0), 1379; CHECK-LE-NEXT: blr380;381; CHECK-BE-LABEL: setnbcr24:382; CHECK-BE: # %bb.0: # %entry383; CHECK-BE-NEXT: clrlwi r3, r3, 16384; CHECK-BE-NEXT: addis r4, r2, globalVal4@toc@ha385; CHECK-BE-NEXT: cmpwi r3, 1386; CHECK-BE-NEXT: setnbcr r3, eq387; CHECK-BE-NEXT: sth r3, globalVal4@toc@l(r4)388; CHECK-BE-NEXT: blr389entry:390 %cmp = icmp ne i16 %a, 1391 %conv1 = sext i1 %cmp to i16392 store i16 %conv1, ptr @globalVal4, align 2393 ret void394}395 396