266 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \3; RUN: -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr9 < %s | FileCheck %s --check-prefix=CHECK-PWR94; RUN: llc -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \5; RUN: -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s6 7; Check CSR split can work properly for tests below.8 9@a = dso_local local_unnamed_addr global i32 0, align 410 11define dso_local signext i32 @test1(ptr %b) local_unnamed_addr {12; CHECK-PWR9-LABEL: test1:13; CHECK-PWR9: # %bb.0: # %entry14; CHECK-PWR9-NEXT: addis r4, r2, a@toc@ha15; CHECK-PWR9-NEXT: lwa r4, a@toc@l(r4)16; CHECK-PWR9-NEXT: cmpld r4, r317; CHECK-PWR9-NEXT: # implicit-def: $r418; CHECK-PWR9-NEXT: beq cr0, .LBB0_219; CHECK-PWR9-NEXT: # %bb.1: # %if.end20; CHECK-PWR9-NEXT: extsw r3, r421; CHECK-PWR9-NEXT: blr22; CHECK-PWR9-NEXT: .LBB0_2: # %if.then23; CHECK-PWR9-NEXT: mflr r024; CHECK-PWR9-NEXT: .cfi_def_cfa_offset 4825; CHECK-PWR9-NEXT: .cfi_offset lr, 1626; CHECK-PWR9-NEXT: .cfi_offset r30, -1627; CHECK-PWR9-NEXT: std r30, -16(r1) # 8-byte Folded Spill28; CHECK-PWR9-NEXT: stdu r1, -48(r1)29; CHECK-PWR9-NEXT: std r0, 64(r1)30; CHECK-PWR9-NEXT: mr r30, r331; CHECK-PWR9-NEXT: bl callVoid32; CHECK-PWR9-NEXT: nop33; CHECK-PWR9-NEXT: mr r3, r3034; CHECK-PWR9-NEXT: bl callNonVoid35; CHECK-PWR9-NEXT: nop36; CHECK-PWR9-NEXT: mr r4, r337; CHECK-PWR9-NEXT: addi r1, r1, 4838; CHECK-PWR9-NEXT: ld r0, 16(r1)39; CHECK-PWR9-NEXT: ld r30, -16(r1) # 8-byte Folded Reload40; CHECK-PWR9-NEXT: mtlr r041; CHECK-PWR9-NEXT: extsw r3, r442; CHECK-PWR9-NEXT: blr43;44; CHECK-LABEL: test1:45; CHECK: # %bb.0: # %entry46; CHECK-NEXT: addis r4, r2, a@toc@ha47; CHECK-NEXT: lwa r4, a@toc@l(r4)48; CHECK-NEXT: cmpld r4, r349; CHECK-NEXT: # implicit-def: $r450; CHECK-NEXT: beq cr0, .LBB0_251; CHECK-NEXT: # %bb.1: # %if.end52; CHECK-NEXT: extsw r3, r453; CHECK-NEXT: blr54; CHECK-NEXT: .LBB0_2: # %if.then55; CHECK-NEXT: mflr r056; CHECK-NEXT: stdu r1, -128(r1)57; CHECK-NEXT: std r0, 144(r1)58; CHECK-NEXT: .cfi_def_cfa_offset 12859; CHECK-NEXT: .cfi_offset lr, 1660; CHECK-NEXT: .cfi_offset r30, -1661; CHECK-NEXT: std r30, 112(r1) # 8-byte Folded Spill62; CHECK-NEXT: mr r30, r363; CHECK-NEXT: bl callVoid64; CHECK-NEXT: nop65; CHECK-NEXT: mr r3, r3066; CHECK-NEXT: bl callNonVoid67; CHECK-NEXT: nop68; CHECK-NEXT: ld r30, 112(r1) # 8-byte Folded Reload69; CHECK-NEXT: mr r4, r370; CHECK-NEXT: addi r1, r1, 12871; CHECK-NEXT: ld r0, 16(r1)72; CHECK-NEXT: mtlr r073; CHECK-NEXT: extsw r3, r474; CHECK-NEXT: blr75entry:76 %0 = load i32, ptr @a, align 4, !tbaa !277 %conv = sext i32 %0 to i6478 %1 = inttoptr i64 %conv to ptr79 %cmp = icmp eq ptr %1, %b80 br i1 %cmp, label %if.then, label %if.end81 82if.then: ; preds = %entry83 %call = tail call signext i32 @callVoid()84 %call2 = tail call signext i32 @callNonVoid(ptr %b)85 br label %if.end86 87if.end: ; preds = %if.then, %entry88 %retval.0 = phi i32 [ %call2, %if.then ], [ undef, %entry ]89 ret i32 %retval.090}91 92declare signext i32 @callVoid(...) local_unnamed_addr93 94declare signext i32 @callNonVoid(ptr) local_unnamed_addr95 96define dso_local signext i32 @test2(ptr %p1) local_unnamed_addr {97; CHECK-PWR9-LABEL: test2:98; CHECK-PWR9: # %bb.0: # %entry99; CHECK-PWR9-NEXT: mflr r0100; CHECK-PWR9-NEXT: .cfi_def_cfa_offset 48101; CHECK-PWR9-NEXT: .cfi_offset lr, 16102; CHECK-PWR9-NEXT: .cfi_offset r30, -16103; CHECK-PWR9-NEXT: std r30, -16(r1) # 8-byte Folded Spill104; CHECK-PWR9-NEXT: stdu r1, -48(r1)105; CHECK-PWR9-NEXT: mr r30, r3106; CHECK-PWR9-NEXT: li r3, 0107; CHECK-PWR9-NEXT: std r0, 64(r1)108; CHECK-PWR9-NEXT: cmpldi r30, 0109; CHECK-PWR9-NEXT: beq cr0, .LBB1_3110; CHECK-PWR9-NEXT: # %bb.1: # %if.end111; CHECK-PWR9-NEXT: addis r4, r2, a@toc@ha112; CHECK-PWR9-NEXT: lwa r4, a@toc@l(r4)113; CHECK-PWR9-NEXT: cmpld r4, r30114; CHECK-PWR9-NEXT: bne cr0, .LBB1_3115; CHECK-PWR9-NEXT: # %bb.2: # %if.then2116; CHECK-PWR9-NEXT: bl callVoid117; CHECK-PWR9-NEXT: nop118; CHECK-PWR9-NEXT: mr r3, r30119; CHECK-PWR9-NEXT: bl callNonVoid120; CHECK-PWR9-NEXT: nop121; CHECK-PWR9-NEXT: .LBB1_3: # %return122; CHECK-PWR9-NEXT: addi r1, r1, 48123; CHECK-PWR9-NEXT: ld r0, 16(r1)124; CHECK-PWR9-NEXT: ld r30, -16(r1) # 8-byte Folded Reload125; CHECK-PWR9-NEXT: mtlr r0126; CHECK-PWR9-NEXT: blr127;128; CHECK-LABEL: test2:129; CHECK: # %bb.0: # %entry130; CHECK-NEXT: mflr r0131; CHECK-NEXT: stdu r1, -128(r1)132; CHECK-NEXT: std r0, 144(r1)133; CHECK-NEXT: .cfi_def_cfa_offset 128134; CHECK-NEXT: .cfi_offset lr, 16135; CHECK-NEXT: .cfi_offset r30, -16136; CHECK-NEXT: std r30, 112(r1) # 8-byte Folded Spill137; CHECK-NEXT: mr r30, r3138; CHECK-NEXT: li r3, 0139; CHECK-NEXT: cmpldi r30, 0140; CHECK-NEXT: beq cr0, .LBB1_3141; CHECK-NEXT: # %bb.1: # %if.end142; CHECK-NEXT: addis r4, r2, a@toc@ha143; CHECK-NEXT: lwa r4, a@toc@l(r4)144; CHECK-NEXT: cmpld r4, r30145; CHECK-NEXT: bne cr0, .LBB1_3146; CHECK-NEXT: # %bb.2: # %if.then2147; CHECK-NEXT: bl callVoid148; CHECK-NEXT: nop149; CHECK-NEXT: mr r3, r30150; CHECK-NEXT: bl callNonVoid151; CHECK-NEXT: nop152; CHECK-NEXT: .LBB1_3: # %return153; CHECK-NEXT: ld r30, 112(r1) # 8-byte Folded Reload154; CHECK-NEXT: addi r1, r1, 128155; CHECK-NEXT: ld r0, 16(r1)156; CHECK-NEXT: mtlr r0157; CHECK-NEXT: blr158entry:159 %tobool = icmp eq ptr %p1, null160 br i1 %tobool, label %return, label %if.end161 162if.end: ; preds = %entry163 %0 = load i32, ptr @a, align 4, !tbaa !2164 %conv = sext i32 %0 to i64165 %1 = inttoptr i64 %conv to ptr166 %cmp = icmp eq ptr %1, %p1167 br i1 %cmp, label %if.then2, label %return168 169if.then2: ; preds = %if.end170 %call = tail call signext i32 @callVoid()171 %call3 = tail call signext i32 @callNonVoid(ptr nonnull %p1)172 br label %return173 174return: ; preds = %if.end, %entry, %if.then2175 %retval.0 = phi i32 [ %call3, %if.then2 ], [ 0, %entry ], [ 0, %if.end ]176 ret i32 %retval.0177}178 179 180define dso_local ptr @test3(ptr nocapture %p1, i8 zeroext %p2) local_unnamed_addr {181; CHECK-PWR9-LABEL: test3:182; CHECK-PWR9: # %bb.0: # %entry183; CHECK-PWR9-NEXT: mflr r0184; CHECK-PWR9-NEXT: .cfi_def_cfa_offset 64185; CHECK-PWR9-NEXT: .cfi_offset lr, 16186; CHECK-PWR9-NEXT: .cfi_offset r29, -24187; CHECK-PWR9-NEXT: .cfi_offset r30, -16188; CHECK-PWR9-NEXT: std r29, -24(r1) # 8-byte Folded Spill189; CHECK-PWR9-NEXT: std r30, -16(r1) # 8-byte Folded Spill190; CHECK-PWR9-NEXT: stdu r1, -64(r1)191; CHECK-PWR9-NEXT: std r0, 80(r1)192; CHECK-PWR9-NEXT: ld r30, 0(r3)193; CHECK-PWR9-NEXT: cmpldi r30, 0194; CHECK-PWR9-NEXT: beq cr0, .LBB2_2195; CHECK-PWR9-NEXT: # %bb.1: # %land.rhs196; CHECK-PWR9-NEXT: mr r29, r3197; CHECK-PWR9-NEXT: mr r3, r30198; CHECK-PWR9-NEXT: bl bar199; CHECK-PWR9-NEXT: nop200; CHECK-PWR9-NEXT: std r3, 0(r29)201; CHECK-PWR9-NEXT: .LBB2_2: # %land.end202; CHECK-PWR9-NEXT: mr r3, r30203; CHECK-PWR9-NEXT: addi r1, r1, 64204; CHECK-PWR9-NEXT: ld r0, 16(r1)205; CHECK-PWR9-NEXT: ld r30, -16(r1) # 8-byte Folded Reload206; CHECK-PWR9-NEXT: ld r29, -24(r1) # 8-byte Folded Reload207; CHECK-PWR9-NEXT: mtlr r0208; CHECK-PWR9-NEXT: blr209;210; CHECK-LABEL: test3:211; CHECK: # %bb.0: # %entry212; CHECK-NEXT: mflr r0213; CHECK-NEXT: stdu r1, -144(r1)214; CHECK-NEXT: std r0, 160(r1)215; CHECK-NEXT: .cfi_def_cfa_offset 144216; CHECK-NEXT: .cfi_offset lr, 16217; CHECK-NEXT: .cfi_offset r29, -24218; CHECK-NEXT: .cfi_offset r30, -16219; CHECK-NEXT: std r30, 128(r1) # 8-byte Folded Spill220; CHECK-NEXT: ld r30, 0(r3)221; CHECK-NEXT: std r29, 120(r1) # 8-byte Folded Spill222; CHECK-NEXT: cmpldi r30, 0223; CHECK-NEXT: beq cr0, .LBB2_2224; CHECK-NEXT: # %bb.1: # %land.rhs225; CHECK-NEXT: mr r29, r3226; CHECK-NEXT: mr r3, r30227; CHECK-NEXT: bl bar228; CHECK-NEXT: nop229; CHECK-NEXT: std r3, 0(r29)230; CHECK-NEXT: .LBB2_2: # %land.end231; CHECK-NEXT: mr r3, r30232; CHECK-NEXT: ld r30, 128(r1) # 8-byte Folded Reload233; CHECK-NEXT: ld r29, 120(r1) # 8-byte Folded Reload234; CHECK-NEXT: addi r1, r1, 144235; CHECK-NEXT: ld r0, 16(r1)236; CHECK-NEXT: mtlr r0237; CHECK-NEXT: blr238entry:239 %0 = load ptr, ptr %p1, align 8, !tbaa !6240 %tobool = icmp eq ptr %0, null241 br i1 %tobool, label %land.end, label %land.rhs242 243land.rhs: ; preds = %entry244 %call = tail call ptr @bar(ptr nonnull %0, i8 zeroext %p2)245 store ptr %call, ptr %p1, align 8, !tbaa !6246 br label %land.end247 248land.end: ; preds = %entry, %land.rhs249 ret ptr %0250}251 252declare ptr @bar(ptr, i8 zeroext) local_unnamed_addr253 254 255!llvm.module.flags = !{!0}256!llvm.ident = !{!1}257 258!0 = !{i32 1, !"wchar_size", i32 4}259!1 = !{!"clang version 10.0.0 (trunk 367381) (llvm/trunk 367388)"}260!2 = !{!3, !3, i64 0}261!3 = !{!"int", !4, i64 0}262!4 = !{!"omnipotent char", !5, i64 0}263!5 = !{!"Simple C/C++ TBAA"}264!6 = !{!7, !7, i64 0}265!7 = !{!"any pointer", !4, i64 0}266