brintos

brintos / llvm-project-archived public Read only

0
0
Text · 28.6 KiB · c9b48b9 Raw
777 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=aarch64 -verify-machineinstrs --mattr=+cpa -aarch64-use-featcpa-codegen=true -O0 -global-isel=1 %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK-CPA-O03; RUN: llc -mtriple=aarch64 -verify-machineinstrs --mattr=+cpa -aarch64-use-featcpa-codegen=true -O3 -global-isel=1 %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK-CPA-O34; RUN: llc -mtriple=aarch64 -verify-machineinstrs --mattr=-cpa -O0 -global-isel=1 %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK-NOCPA-O05; RUN: llc -mtriple=aarch64 -verify-machineinstrs --mattr=-cpa -O3 -global-isel=1 %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK-NOCPA-O36 7%struct.my_type = type { i64, i64 }8%struct.my_type2 = type { i64, i64, i64, i64, i64, i64 }9 10@array = external dso_local global [10 x %struct.my_type], align 811@array2 = external dso_local global [10 x %struct.my_type2], align 812 13define void @addpt1(i64 %index, i64 %arg) {14; CHECK-CPA-O0-LABEL: addpt1:15; CHECK-CPA-O0:       // %bb.0: // %entry16; CHECK-CPA-O0-NEXT:    adrp x8, array17; CHECK-CPA-O0-NEXT:    add x8, x8, :lo12:array18; CHECK-CPA-O0-NEXT:    addpt x8, x8, x0, lsl #419; CHECK-CPA-O0-NEXT:    str x1, [x8, #8]20; CHECK-CPA-O0-NEXT:    ret21;22; CHECK-CPA-O3-LABEL: addpt1:23; CHECK-CPA-O3:       // %bb.0: // %entry24; CHECK-CPA-O3-NEXT:    adrp x8, array25; CHECK-CPA-O3-NEXT:    add x8, x8, :lo12:array26; CHECK-CPA-O3-NEXT:    addpt x8, x8, x0, lsl #427; CHECK-CPA-O3-NEXT:    str x1, [x8, #8]28; CHECK-CPA-O3-NEXT:    ret29;30; CHECK-NOCPA-O0-LABEL: addpt1:31; CHECK-NOCPA-O0:       // %bb.0: // %entry32; CHECK-NOCPA-O0-NEXT:    adrp x8, array33; CHECK-NOCPA-O0-NEXT:    add x8, x8, :lo12:array34; CHECK-NOCPA-O0-NEXT:    add x8, x8, x0, lsl #435; CHECK-NOCPA-O0-NEXT:    str x1, [x8, #8]36; CHECK-NOCPA-O0-NEXT:    ret37;38; CHECK-NOCPA-O3-LABEL: addpt1:39; CHECK-NOCPA-O3:       // %bb.0: // %entry40; CHECK-NOCPA-O3-NEXT:    adrp x8, array41; CHECK-NOCPA-O3-NEXT:    add x8, x8, :lo12:array42; CHECK-NOCPA-O3-NEXT:    add x8, x8, x0, lsl #443; CHECK-NOCPA-O3-NEXT:    str x1, [x8, #8]44; CHECK-NOCPA-O3-NEXT:    ret45entry:46  %e2 = getelementptr inbounds %struct.my_type, ptr @array, i64 %index, i32 147  store i64 %arg, ptr %e2, align 848  ret void49}50 51define void @maddpt1(i32 %pos, ptr %val) {52; CHECK-CPA-O0-LABEL: maddpt1:53; CHECK-CPA-O0:       // %bb.0: // %entry54; CHECK-CPA-O0-NEXT:    // implicit-def: $x855; CHECK-CPA-O0-NEXT:    mov w8, w056; CHECK-CPA-O0-NEXT:    sxtw x8, w857; CHECK-CPA-O0-NEXT:    mov w9, #48 // =0x3058; CHECK-CPA-O0-NEXT:    // kill: def $x9 killed $w959; CHECK-CPA-O0-NEXT:    adrp x10, array260; CHECK-CPA-O0-NEXT:    add x10, x10, :lo12:array261; CHECK-CPA-O0-NEXT:    maddpt x0, x8, x9, x1062; CHECK-CPA-O0-NEXT:    mov w8, #48 // =0x3063; CHECK-CPA-O0-NEXT:    mov w2, w864; CHECK-CPA-O0-NEXT:    b memcpy65;66; CHECK-CPA-O3-LABEL: maddpt1:67; CHECK-CPA-O3:       // %bb.0: // %entry68; CHECK-CPA-O3-NEXT:    // kill: def $w0 killed $w0 def $x069; CHECK-CPA-O3-NEXT:    sxtw x9, w070; CHECK-CPA-O3-NEXT:    mov w8, #48 // =0x3071; CHECK-CPA-O3-NEXT:    ldr q0, [x1]72; CHECK-CPA-O3-NEXT:    adrp x10, array273; CHECK-CPA-O3-NEXT:    add x10, x10, :lo12:array274; CHECK-CPA-O3-NEXT:    maddpt x8, x9, x8, x1075; CHECK-CPA-O3-NEXT:    str q0, [x8]76; CHECK-CPA-O3-NEXT:    ldr q0, [x1, #16]77; CHECK-CPA-O3-NEXT:    str q0, [x8, #16]78; CHECK-CPA-O3-NEXT:    ldr q0, [x1, #32]79; CHECK-CPA-O3-NEXT:    str q0, [x8, #32]80; CHECK-CPA-O3-NEXT:    ret81;82; CHECK-NOCPA-O0-LABEL: maddpt1:83; CHECK-NOCPA-O0:       // %bb.0: // %entry84; CHECK-NOCPA-O0-NEXT:    adrp x9, array285; CHECK-NOCPA-O0-NEXT:    add x9, x9, :lo12:array286; CHECK-NOCPA-O0-NEXT:    mov w8, #48 // =0x3087; CHECK-NOCPA-O0-NEXT:    smaddl x0, w0, w8, x988; CHECK-NOCPA-O0-NEXT:    mov w8, #48 // =0x3089; CHECK-NOCPA-O0-NEXT:    mov w2, w890; CHECK-NOCPA-O0-NEXT:    b memcpy91;92; CHECK-NOCPA-O3-LABEL: maddpt1:93; CHECK-NOCPA-O3:       // %bb.0: // %entry94; CHECK-NOCPA-O3-NEXT:    mov w8, #48 // =0x3095; CHECK-NOCPA-O3-NEXT:    adrp x9, array296; CHECK-NOCPA-O3-NEXT:    add x9, x9, :lo12:array297; CHECK-NOCPA-O3-NEXT:    smaddl x8, w0, w8, x998; CHECK-NOCPA-O3-NEXT:    ldr q0, [x1]99; CHECK-NOCPA-O3-NEXT:    str q0, [x8]100; CHECK-NOCPA-O3-NEXT:    ldr q0, [x1, #16]101; CHECK-NOCPA-O3-NEXT:    str q0, [x8, #16]102; CHECK-NOCPA-O3-NEXT:    ldr q0, [x1, #32]103; CHECK-NOCPA-O3-NEXT:    str q0, [x8, #32]104; CHECK-NOCPA-O3-NEXT:    ret105entry:106  %idxprom = sext i32 %pos to i64107  %arrayidx = getelementptr inbounds [10 x %struct.my_type2], ptr @array2, i64 0, i64 %idxprom108  tail call void @llvm.memcpy.p0.p0.i64(ptr align 8 dereferenceable(48) %arrayidx, ptr align 8 dereferenceable(48) %val, i64 48, i1 false)109  ret void110}111 112define void @msubpt1(i32 %index, i32 %elem) {113; CHECK-CPA-O0-LABEL: msubpt1:114; CHECK-CPA-O0:       // %bb.0: // %entry115; CHECK-CPA-O0-NEXT:    // implicit-def: $x8116; CHECK-CPA-O0-NEXT:    mov w8, w0117; CHECK-CPA-O0-NEXT:    sxtw x10, w8118; CHECK-CPA-O0-NEXT:    mov w8, #48 // =0x30119; CHECK-CPA-O0-NEXT:    mov w9, w8120; CHECK-CPA-O0-NEXT:    mov w8, #288 // =0x120121; CHECK-CPA-O0-NEXT:    mov w11, w8122; CHECK-CPA-O0-NEXT:    adrp x8, array2123; CHECK-CPA-O0-NEXT:    add x8, x8, :lo12:array2124; CHECK-CPA-O0-NEXT:    addpt x11, x8, x11125; CHECK-CPA-O0-NEXT:    msubpt x0, x9, x10, x11126; CHECK-CPA-O0-NEXT:    mov w9, #48 // =0x30127; CHECK-CPA-O0-NEXT:    mov w2, w9128; CHECK-CPA-O0-NEXT:    mov w9, #96 // =0x60129; CHECK-CPA-O0-NEXT:    // kill: def $x9 killed $w9130; CHECK-CPA-O0-NEXT:    addpt x1, x8, x9131; CHECK-CPA-O0-NEXT:    b memcpy132;133; CHECK-CPA-O3-LABEL: msubpt1:134; CHECK-CPA-O3:       // %bb.0: // %entry135; CHECK-CPA-O3-NEXT:    // kill: def $w0 killed $w0 def $x0136; CHECK-CPA-O3-NEXT:    sxtw x9, w0137; CHECK-CPA-O3-NEXT:    adrp x10, array2+96138; CHECK-CPA-O3-NEXT:    add x10, x10, :lo12:array2+96139; CHECK-CPA-O3-NEXT:    mov w8, #48 // =0x30140; CHECK-CPA-O3-NEXT:    ldr q0, [x10]141; CHECK-CPA-O3-NEXT:    msubpt x8, x8, x9, x10142; CHECK-CPA-O3-NEXT:    str q0, [x8, #192]143; CHECK-CPA-O3-NEXT:    ldr q0, [x10, #16]144; CHECK-CPA-O3-NEXT:    str q0, [x8, #208]145; CHECK-CPA-O3-NEXT:    ldr q0, [x10, #32]146; CHECK-CPA-O3-NEXT:    str q0, [x8, #224]147; CHECK-CPA-O3-NEXT:    ret148;149; CHECK-NOCPA-O0-LABEL: msubpt1:150; CHECK-NOCPA-O0:       // %bb.0: // %entry151; CHECK-NOCPA-O0-NEXT:    // implicit-def: $x8152; CHECK-NOCPA-O0-NEXT:    mov w8, w0153; CHECK-NOCPA-O0-NEXT:    sxtw x8, w8154; CHECK-NOCPA-O0-NEXT:    mov w9, #48 // =0x30155; CHECK-NOCPA-O0-NEXT:    // kill: def $x9 killed $w9156; CHECK-NOCPA-O0-NEXT:    mneg x10, x8, x9157; CHECK-NOCPA-O0-NEXT:    adrp x8, array2158; CHECK-NOCPA-O0-NEXT:    add x8, x8, :lo12:array2159; CHECK-NOCPA-O0-NEXT:    add x9, x8, #288160; CHECK-NOCPA-O0-NEXT:    add x0, x9, x10161; CHECK-NOCPA-O0-NEXT:    mov w9, #48 // =0x30162; CHECK-NOCPA-O0-NEXT:    mov w2, w9163; CHECK-NOCPA-O0-NEXT:    add x1, x8, #96164; CHECK-NOCPA-O0-NEXT:    b memcpy165;166; CHECK-NOCPA-O3-LABEL: msubpt1:167; CHECK-NOCPA-O3:       // %bb.0: // %entry168; CHECK-NOCPA-O3-NEXT:    // kill: def $w0 killed $w0 def $x0169; CHECK-NOCPA-O3-NEXT:    sxtw x8, w0170; CHECK-NOCPA-O3-NEXT:    mov w9, #48 // =0x30171; CHECK-NOCPA-O3-NEXT:    mneg x8, x8, x9172; CHECK-NOCPA-O3-NEXT:    adrp x9, array2+96173; CHECK-NOCPA-O3-NEXT:    add x9, x9, :lo12:array2+96174; CHECK-NOCPA-O3-NEXT:    ldr q0, [x9]175; CHECK-NOCPA-O3-NEXT:    add x8, x9, x8176; CHECK-NOCPA-O3-NEXT:    str q0, [x8, #192]177; CHECK-NOCPA-O3-NEXT:    ldr q0, [x9, #16]178; CHECK-NOCPA-O3-NEXT:    str q0, [x8, #208]179; CHECK-NOCPA-O3-NEXT:    ldr q0, [x9, #32]180; CHECK-NOCPA-O3-NEXT:    str q0, [x8, #224]181; CHECK-NOCPA-O3-NEXT:    ret182entry:183  %idx.ext = sext i32 %index to i64184  %idx.neg = sub nsw i64 0, %idx.ext185  %add.ptr = getelementptr inbounds %struct.my_type2, ptr getelementptr inbounds ([10 x %struct.my_type2], ptr @array2, i64 0, i64 6), i64 %idx.neg186  tail call void @llvm.memcpy.p0.p0.i64(ptr align 8 dereferenceable(48) %add.ptr, ptr align 8 dereferenceable(48) getelementptr inbounds ([10 x %struct.my_type2], ptr @array2, i64 0, i64 2), i64 48, i1 false), !tbaa.struct !6187  ret void188}189 190define void @subpt1(i32 %index, i32 %elem) {191; CHECK-CPA-O0-LABEL: subpt1:192; CHECK-CPA-O0:       // %bb.0: // %entry193; CHECK-CPA-O0-NEXT:    mov w8, #-16 // =0xfffffff0194; CHECK-CPA-O0-NEXT:    smull x9, w0, w8195; CHECK-CPA-O0-NEXT:    adrp x8, array196; CHECK-CPA-O0-NEXT:    add x8, x8, :lo12:array197; CHECK-CPA-O0-NEXT:    ldr q0, [x8, #32]198; CHECK-CPA-O0-NEXT:    mov w10, #96 // =0x60199; CHECK-CPA-O0-NEXT:    // kill: def $x10 killed $w10200; CHECK-CPA-O0-NEXT:    addpt x8, x8, x10201; CHECK-CPA-O0-NEXT:    str q0, [x8, x9, lsl #4]202; CHECK-CPA-O0-NEXT:    ret203;204; CHECK-CPA-O3-LABEL: subpt1:205; CHECK-CPA-O3:       // %bb.0: // %entry206; CHECK-CPA-O3-NEXT:    mov w8, #-16 // =0xfffffff0207; CHECK-CPA-O3-NEXT:    adrp x9, array+32208; CHECK-CPA-O3-NEXT:    add x9, x9, :lo12:array+32209; CHECK-CPA-O3-NEXT:    smull x8, w0, w8210; CHECK-CPA-O3-NEXT:    ldr q0, [x9]211; CHECK-CPA-O3-NEXT:    addpt x8, x9, x8, lsl #4212; CHECK-CPA-O3-NEXT:    str q0, [x8, #64]213; CHECK-CPA-O3-NEXT:    ret214;215; CHECK-NOCPA-O0-LABEL: subpt1:216; CHECK-NOCPA-O0:       // %bb.0: // %entry217; CHECK-NOCPA-O0-NEXT:    mov w8, #-16 // =0xfffffff0218; CHECK-NOCPA-O0-NEXT:    smull x9, w0, w8219; CHECK-NOCPA-O0-NEXT:    adrp x8, array220; CHECK-NOCPA-O0-NEXT:    add x8, x8, :lo12:array221; CHECK-NOCPA-O0-NEXT:    ldr q0, [x8, #32]222; CHECK-NOCPA-O0-NEXT:    add x8, x8, #96223; CHECK-NOCPA-O0-NEXT:    str q0, [x8, x9, lsl #4]224; CHECK-NOCPA-O0-NEXT:    ret225;226; CHECK-NOCPA-O3-LABEL: subpt1:227; CHECK-NOCPA-O3:       // %bb.0: // %entry228; CHECK-NOCPA-O3-NEXT:    mov w8, #-16 // =0xfffffff0229; CHECK-NOCPA-O3-NEXT:    adrp x9, array+32230; CHECK-NOCPA-O3-NEXT:    add x9, x9, :lo12:array+32231; CHECK-NOCPA-O3-NEXT:    smull x8, w0, w8232; CHECK-NOCPA-O3-NEXT:    ldr q0, [x9]233; CHECK-NOCPA-O3-NEXT:    add x8, x9, x8, lsl #4234; CHECK-NOCPA-O3-NEXT:    str q0, [x8, #64]235; CHECK-NOCPA-O3-NEXT:    ret236entry:237  %conv = sext i32 %index to i64238  %mul.neg = mul nsw i64 %conv, -16239  %add.ptr = getelementptr inbounds %struct.my_type, ptr getelementptr inbounds ([10 x %struct.my_type], ptr @array, i64 0, i64 6), i64 %mul.neg240  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %add.ptr, ptr noundef nonnull align 8 dereferenceable(16) getelementptr inbounds ([10 x %struct.my_type], ptr @array, i64 0, i64 2), i64 16, i1 false), !tbaa.struct !6241  ret void242}243 244define void @subpt2(i32 %index, i32 %elem) {245; CHECK-CPA-O0-LABEL: subpt2:246; CHECK-CPA-O0:       // %bb.0: // %entry247; CHECK-CPA-O0-NEXT:    mov x8, xzr248; CHECK-CPA-O0-NEXT:    subs x9, x8, w0, sxtw249; CHECK-CPA-O0-NEXT:    adrp x8, array250; CHECK-CPA-O0-NEXT:    add x8, x8, :lo12:array251; CHECK-CPA-O0-NEXT:    ldr q0, [x8, #32]252; CHECK-CPA-O0-NEXT:    mov w10, #96 // =0x60253; CHECK-CPA-O0-NEXT:    // kill: def $x10 killed $w10254; CHECK-CPA-O0-NEXT:    addpt x8, x8, x10255; CHECK-CPA-O0-NEXT:    str q0, [x8, x9, lsl #4]256; CHECK-CPA-O0-NEXT:    ret257;258; CHECK-CPA-O3-LABEL: subpt2:259; CHECK-CPA-O3:       // %bb.0: // %entry260; CHECK-CPA-O3-NEXT:    mov x8, xzr261; CHECK-CPA-O3-NEXT:    adrp x9, array+32262; CHECK-CPA-O3-NEXT:    add x9, x9, :lo12:array+32263; CHECK-CPA-O3-NEXT:    sub x8, x8, w0, sxtw264; CHECK-CPA-O3-NEXT:    ldr q0, [x9]265; CHECK-CPA-O3-NEXT:    addpt x8, x9, x8, lsl #4266; CHECK-CPA-O3-NEXT:    str q0, [x8, #64]267; CHECK-CPA-O3-NEXT:    ret268;269; CHECK-NOCPA-O0-LABEL: subpt2:270; CHECK-NOCPA-O0:       // %bb.0: // %entry271; CHECK-NOCPA-O0-NEXT:    mov x8, xzr272; CHECK-NOCPA-O0-NEXT:    subs x9, x8, w0, sxtw273; CHECK-NOCPA-O0-NEXT:    adrp x8, array274; CHECK-NOCPA-O0-NEXT:    add x8, x8, :lo12:array275; CHECK-NOCPA-O0-NEXT:    ldr q0, [x8, #32]276; CHECK-NOCPA-O0-NEXT:    add x8, x8, #96277; CHECK-NOCPA-O0-NEXT:    str q0, [x8, x9, lsl #4]278; CHECK-NOCPA-O0-NEXT:    ret279;280; CHECK-NOCPA-O3-LABEL: subpt2:281; CHECK-NOCPA-O3:       // %bb.0: // %entry282; CHECK-NOCPA-O3-NEXT:    mov x8, xzr283; CHECK-NOCPA-O3-NEXT:    adrp x9, array+32284; CHECK-NOCPA-O3-NEXT:    add x9, x9, :lo12:array+32285; CHECK-NOCPA-O3-NEXT:    sub x8, x8, w0, sxtw286; CHECK-NOCPA-O3-NEXT:    ldr q0, [x9]287; CHECK-NOCPA-O3-NEXT:    add x8, x9, x8, lsl #4288; CHECK-NOCPA-O3-NEXT:    str q0, [x8, #64]289; CHECK-NOCPA-O3-NEXT:    ret290entry:291  %idx.ext = sext i32 %index to i64292  %idx.neg = sub nsw i64 0, %idx.ext293  %add.ptr = getelementptr inbounds %struct.my_type, ptr getelementptr inbounds ([10 x %struct.my_type], ptr @array, i64 0, i64 6), i64 %idx.neg294  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %add.ptr, ptr noundef nonnull align 8 dereferenceable(16) getelementptr inbounds ([10 x %struct.my_type], ptr @array, i64 0, i64 2), i64 16, i1 false), !tbaa.struct !11295  ret void296}297 298define ptr @subpt3(ptr %ptr, i32 %index) {299; CHECK-CPA-O0-LABEL: subpt3:300; CHECK-CPA-O0:       // %bb.0: // %entry301; CHECK-CPA-O0-NEXT:    mov x8, #-8 // =0xfffffffffffffff8302; CHECK-CPA-O0-NEXT:    addpt x0, x0, x8303; CHECK-CPA-O0-NEXT:    ret304;305; CHECK-CPA-O3-LABEL: subpt3:306; CHECK-CPA-O3:       // %bb.0: // %entry307; CHECK-CPA-O3-NEXT:    mov x8, #-8 // =0xfffffffffffffff8308; CHECK-CPA-O3-NEXT:    addpt x0, x0, x8309; CHECK-CPA-O3-NEXT:    ret310;311; CHECK-NOCPA-O0-LABEL: subpt3:312; CHECK-NOCPA-O0:       // %bb.0: // %entry313; CHECK-NOCPA-O0-NEXT:    subs x0, x0, #8314; CHECK-NOCPA-O0-NEXT:    ret315;316; CHECK-NOCPA-O3-LABEL: subpt3:317; CHECK-NOCPA-O3:       // %bb.0: // %entry318; CHECK-NOCPA-O3-NEXT:    sub x0, x0, #8319; CHECK-NOCPA-O3-NEXT:    ret320entry:321  %incdec.ptr.i.i.i = getelementptr inbounds i64, ptr %ptr, i64 -1322  ret ptr %incdec.ptr.i.i.i323}324 325define i64 @subi64(i64 %ptr, i32 %index) {326; CHECK-CPA-O0-LABEL: subi64:327; CHECK-CPA-O0:       // %bb.0: // %entry328; CHECK-CPA-O0-NEXT:    subs x0, x0, #1329; CHECK-CPA-O0-NEXT:    ret330;331; CHECK-CPA-O3-LABEL: subi64:332; CHECK-CPA-O3:       // %bb.0: // %entry333; CHECK-CPA-O3-NEXT:    sub x0, x0, #1334; CHECK-CPA-O3-NEXT:    ret335;336; CHECK-NOCPA-O0-LABEL: subi64:337; CHECK-NOCPA-O0:       // %bb.0: // %entry338; CHECK-NOCPA-O0-NEXT:    subs x0, x0, #1339; CHECK-NOCPA-O0-NEXT:    ret340;341; CHECK-NOCPA-O3-LABEL: subi64:342; CHECK-NOCPA-O3:       // %bb.0: // %entry343; CHECK-NOCPA-O3-NEXT:    sub x0, x0, #1344; CHECK-NOCPA-O3-NEXT:    ret345entry:346  %incdec.ptr.i.i.i = add i64 %ptr, -1347  ret i64 %incdec.ptr.i.i.i348}349 350define i32 @subi32(i32 %ptr, i32 %index) {351; CHECK-CPA-O0-LABEL: subi32:352; CHECK-CPA-O0:       // %bb.0: // %entry353; CHECK-CPA-O0-NEXT:    subs w0, w0, #1354; CHECK-CPA-O0-NEXT:    ret355;356; CHECK-CPA-O3-LABEL: subi32:357; CHECK-CPA-O3:       // %bb.0: // %entry358; CHECK-CPA-O3-NEXT:    sub w0, w0, #1359; CHECK-CPA-O3-NEXT:    ret360;361; CHECK-NOCPA-O0-LABEL: subi32:362; CHECK-NOCPA-O0:       // %bb.0: // %entry363; CHECK-NOCPA-O0-NEXT:    subs w0, w0, #1364; CHECK-NOCPA-O0-NEXT:    ret365;366; CHECK-NOCPA-O3-LABEL: subi32:367; CHECK-NOCPA-O3:       // %bb.0: // %entry368; CHECK-NOCPA-O3-NEXT:    sub w0, w0, #1369; CHECK-NOCPA-O3-NEXT:    ret370entry:371  %incdec.ptr.i.i.i = add i32 %ptr, -1372  ret i32 %incdec.ptr.i.i.i373}374 375define i16 @subi16(i16 %ptr, i32 %index) {376; CHECK-CPA-O0-LABEL: subi16:377; CHECK-CPA-O0:       // %bb.0: // %entry378; CHECK-CPA-O0-NEXT:    subs w0, w0, #1379; CHECK-CPA-O0-NEXT:    ret380;381; CHECK-CPA-O3-LABEL: subi16:382; CHECK-CPA-O3:       // %bb.0: // %entry383; CHECK-CPA-O3-NEXT:    sub w0, w0, #1384; CHECK-CPA-O3-NEXT:    ret385;386; CHECK-NOCPA-O0-LABEL: subi16:387; CHECK-NOCPA-O0:       // %bb.0: // %entry388; CHECK-NOCPA-O0-NEXT:    subs w0, w0, #1389; CHECK-NOCPA-O0-NEXT:    ret390;391; CHECK-NOCPA-O3-LABEL: subi16:392; CHECK-NOCPA-O3:       // %bb.0: // %entry393; CHECK-NOCPA-O3-NEXT:    sub w0, w0, #1394; CHECK-NOCPA-O3-NEXT:    ret395entry:396  %incdec.ptr.i.i.i = add i16 %ptr, -1397  ret i16 %incdec.ptr.i.i.i398}399 400define i64 @addi64(i64 %ptr, i32 %index) {401; CHECK-CPA-O0-LABEL: addi64:402; CHECK-CPA-O0:       // %bb.0: // %entry403; CHECK-CPA-O0-NEXT:    add x0, x0, #1404; CHECK-CPA-O0-NEXT:    ret405;406; CHECK-CPA-O3-LABEL: addi64:407; CHECK-CPA-O3:       // %bb.0: // %entry408; CHECK-CPA-O3-NEXT:    add x0, x0, #1409; CHECK-CPA-O3-NEXT:    ret410;411; CHECK-NOCPA-O0-LABEL: addi64:412; CHECK-NOCPA-O0:       // %bb.0: // %entry413; CHECK-NOCPA-O0-NEXT:    add x0, x0, #1414; CHECK-NOCPA-O0-NEXT:    ret415;416; CHECK-NOCPA-O3-LABEL: addi64:417; CHECK-NOCPA-O3:       // %bb.0: // %entry418; CHECK-NOCPA-O3-NEXT:    add x0, x0, #1419; CHECK-NOCPA-O3-NEXT:    ret420entry:421  %incdec.ptr.i.i.i = add i64 %ptr, 1422  ret i64 %incdec.ptr.i.i.i423}424 425define i32 @addi32(i32 %ptr, i32 %index) {426; CHECK-CPA-O0-LABEL: addi32:427; CHECK-CPA-O0:       // %bb.0: // %entry428; CHECK-CPA-O0-NEXT:    add w0, w0, #1429; CHECK-CPA-O0-NEXT:    ret430;431; CHECK-CPA-O3-LABEL: addi32:432; CHECK-CPA-O3:       // %bb.0: // %entry433; CHECK-CPA-O3-NEXT:    add w0, w0, #1434; CHECK-CPA-O3-NEXT:    ret435;436; CHECK-NOCPA-O0-LABEL: addi32:437; CHECK-NOCPA-O0:       // %bb.0: // %entry438; CHECK-NOCPA-O0-NEXT:    add w0, w0, #1439; CHECK-NOCPA-O0-NEXT:    ret440;441; CHECK-NOCPA-O3-LABEL: addi32:442; CHECK-NOCPA-O3:       // %bb.0: // %entry443; CHECK-NOCPA-O3-NEXT:    add w0, w0, #1444; CHECK-NOCPA-O3-NEXT:    ret445entry:446  %incdec.ptr.i.i.i = add i32 %ptr, 1447  ret i32 %incdec.ptr.i.i.i448}449 450define i16 @addi16(i16 %ptr, i32 %index) {451; CHECK-CPA-O0-LABEL: addi16:452; CHECK-CPA-O0:       // %bb.0: // %entry453; CHECK-CPA-O0-NEXT:    add w0, w0, #1454; CHECK-CPA-O0-NEXT:    ret455;456; CHECK-CPA-O3-LABEL: addi16:457; CHECK-CPA-O3:       // %bb.0: // %entry458; CHECK-CPA-O3-NEXT:    add w0, w0, #1459; CHECK-CPA-O3-NEXT:    ret460;461; CHECK-NOCPA-O0-LABEL: addi16:462; CHECK-NOCPA-O0:       // %bb.0: // %entry463; CHECK-NOCPA-O0-NEXT:    add w0, w0, #1464; CHECK-NOCPA-O0-NEXT:    ret465;466; CHECK-NOCPA-O3-LABEL: addi16:467; CHECK-NOCPA-O3:       // %bb.0: // %entry468; CHECK-NOCPA-O3-NEXT:    add w0, w0, #1469; CHECK-NOCPA-O3-NEXT:    ret470entry:471  %incdec.ptr.i.i.i = add i16 %ptr, 1472  ret i16 %incdec.ptr.i.i.i473}474 475define i64 @arith1(i64 noundef %0, i64 noundef %1, i64 noundef %2) {476; CHECK-CPA-O0-LABEL: arith1:477; CHECK-CPA-O0:       // %bb.0: // %entry478; CHECK-CPA-O0-NEXT:    sub sp, sp, #32479; CHECK-CPA-O0-NEXT:    .cfi_def_cfa_offset 32480; CHECK-CPA-O0-NEXT:    str x0, [sp, #24]481; CHECK-CPA-O0-NEXT:    str x1, [sp, #16]482; CHECK-CPA-O0-NEXT:    str x2, [sp, #8]483; CHECK-CPA-O0-NEXT:    ldr x8, [sp, #24]484; CHECK-CPA-O0-NEXT:    ldr x9, [sp, #16]485; CHECK-CPA-O0-NEXT:    ldr x10, [sp, #8]486; CHECK-CPA-O0-NEXT:    mul x9, x9, x10487; CHECK-CPA-O0-NEXT:    add x0, x8, x9488; CHECK-CPA-O0-NEXT:    add sp, sp, #32489; CHECK-CPA-O0-NEXT:    ret490;491; CHECK-CPA-O3-LABEL: arith1:492; CHECK-CPA-O3:       // %bb.0: // %entry493; CHECK-CPA-O3-NEXT:    sub sp, sp, #32494; CHECK-CPA-O3-NEXT:    .cfi_def_cfa_offset 32495; CHECK-CPA-O3-NEXT:    stp x2, x1, [sp, #8]496; CHECK-CPA-O3-NEXT:    str x0, [sp, #24]497; CHECK-CPA-O3-NEXT:    madd x0, x1, x2, x0498; CHECK-CPA-O3-NEXT:    add sp, sp, #32499; CHECK-CPA-O3-NEXT:    ret500;501; CHECK-NOCPA-O0-LABEL: arith1:502; CHECK-NOCPA-O0:       // %bb.0: // %entry503; CHECK-NOCPA-O0-NEXT:    sub sp, sp, #32504; CHECK-NOCPA-O0-NEXT:    .cfi_def_cfa_offset 32505; CHECK-NOCPA-O0-NEXT:    str x0, [sp, #24]506; CHECK-NOCPA-O0-NEXT:    str x1, [sp, #16]507; CHECK-NOCPA-O0-NEXT:    str x2, [sp, #8]508; CHECK-NOCPA-O0-NEXT:    ldr x8, [sp, #24]509; CHECK-NOCPA-O0-NEXT:    ldr x9, [sp, #16]510; CHECK-NOCPA-O0-NEXT:    ldr x10, [sp, #8]511; CHECK-NOCPA-O0-NEXT:    mul x9, x9, x10512; CHECK-NOCPA-O0-NEXT:    add x0, x8, x9513; CHECK-NOCPA-O0-NEXT:    add sp, sp, #32514; CHECK-NOCPA-O0-NEXT:    ret515;516; CHECK-NOCPA-O3-LABEL: arith1:517; CHECK-NOCPA-O3:       // %bb.0: // %entry518; CHECK-NOCPA-O3-NEXT:    sub sp, sp, #32519; CHECK-NOCPA-O3-NEXT:    .cfi_def_cfa_offset 32520; CHECK-NOCPA-O3-NEXT:    stp x2, x1, [sp, #8]521; CHECK-NOCPA-O3-NEXT:    str x0, [sp, #24]522; CHECK-NOCPA-O3-NEXT:    madd x0, x1, x2, x0523; CHECK-NOCPA-O3-NEXT:    add sp, sp, #32524; CHECK-NOCPA-O3-NEXT:    ret525entry:526  %4 = alloca i64, align 8527  %5 = alloca i64, align 8528  %6 = alloca i64, align 8529  store i64 %0, ptr %4, align 8530  store i64 %1, ptr %5, align 8531  store i64 %2, ptr %6, align 8532  %7 = load i64, ptr %4, align 8533  %8 = load i64, ptr %5, align 8534  %9 = load i64, ptr %6, align 8535  %10 = mul nsw i64 %8, %9536  %11 = add nsw i64 %7, %10537  ret i64 %11538}539 540define i64 @arith2(ptr noundef %0, i64 noundef %1, i64 noundef %2, i32 noundef %3) {541; CHECK-CPA-O0-LABEL: arith2:542; CHECK-CPA-O0:       // %bb.0: // %entry543; CHECK-CPA-O0-NEXT:    sub sp, sp, #32544; CHECK-CPA-O0-NEXT:    .cfi_def_cfa_offset 32545; CHECK-CPA-O0-NEXT:    str x0, [sp, #24]546; CHECK-CPA-O0-NEXT:    str x1, [sp, #16]547; CHECK-CPA-O0-NEXT:    str x2, [sp, #8]548; CHECK-CPA-O0-NEXT:    str w3, [sp, #4]549; CHECK-CPA-O0-NEXT:    ldr x10, [sp, #24]550; CHECK-CPA-O0-NEXT:    ldrsw x8, [sp, #4]551; CHECK-CPA-O0-NEXT:    mov w9, #48 // =0x30552; CHECK-CPA-O0-NEXT:    // kill: def $x9 killed $w9553; CHECK-CPA-O0-NEXT:    maddpt x8, x8, x9, x10554; CHECK-CPA-O0-NEXT:    ldr x8, [x8, #24]555; CHECK-CPA-O0-NEXT:    ldr x10, [sp, #16]556; CHECK-CPA-O0-NEXT:    ldr x9, [sp, #8]557; CHECK-CPA-O0-NEXT:    mul x10, x10, x9558; CHECK-CPA-O0-NEXT:    add x8, x8, x10559; CHECK-CPA-O0-NEXT:    subs x0, x8, x9560; CHECK-CPA-O0-NEXT:    add sp, sp, #32561; CHECK-CPA-O0-NEXT:    ret562;563; CHECK-CPA-O3-LABEL: arith2:564; CHECK-CPA-O3:       // %bb.0: // %entry565; CHECK-CPA-O3-NEXT:    sub sp, sp, #32566; CHECK-CPA-O3-NEXT:    .cfi_def_cfa_offset 32567; CHECK-CPA-O3-NEXT:    str w3, [sp, #4]568; CHECK-CPA-O3-NEXT:    mov w10, #48 // =0x30569; CHECK-CPA-O3-NEXT:    ldrsw x9, [sp, #4]570; CHECK-CPA-O3-NEXT:    stp x1, x0, [sp, #16]571; CHECK-CPA-O3-NEXT:    maddpt x8, x9, x10, x0572; CHECK-CPA-O3-NEXT:    str x2, [sp, #8]573; CHECK-CPA-O3-NEXT:    ldr x8, [x8, #24]574; CHECK-CPA-O3-NEXT:    madd x8, x1, x2, x8575; CHECK-CPA-O3-NEXT:    sub x0, x8, x2576; CHECK-CPA-O3-NEXT:    add sp, sp, #32577; CHECK-CPA-O3-NEXT:    ret578;579; CHECK-NOCPA-O0-LABEL: arith2:580; CHECK-NOCPA-O0:       // %bb.0: // %entry581; CHECK-NOCPA-O0-NEXT:    sub sp, sp, #32582; CHECK-NOCPA-O0-NEXT:    .cfi_def_cfa_offset 32583; CHECK-NOCPA-O0-NEXT:    str x0, [sp, #24]584; CHECK-NOCPA-O0-NEXT:    str x1, [sp, #16]585; CHECK-NOCPA-O0-NEXT:    str x2, [sp, #8]586; CHECK-NOCPA-O0-NEXT:    str w3, [sp, #4]587; CHECK-NOCPA-O0-NEXT:    ldr x8, [sp, #24]588; CHECK-NOCPA-O0-NEXT:    ldrsw x9, [sp, #4]589; CHECK-NOCPA-O0-NEXT:    mov w10, #48 // =0x30590; CHECK-NOCPA-O0-NEXT:    // kill: def $x10 killed $w10591; CHECK-NOCPA-O0-NEXT:    mul x9, x9, x10592; CHECK-NOCPA-O0-NEXT:    add x8, x8, x9593; CHECK-NOCPA-O0-NEXT:    ldr x8, [x8, #24]594; CHECK-NOCPA-O0-NEXT:    ldr x10, [sp, #16]595; CHECK-NOCPA-O0-NEXT:    ldr x9, [sp, #8]596; CHECK-NOCPA-O0-NEXT:    mul x10, x10, x9597; CHECK-NOCPA-O0-NEXT:    add x8, x8, x10598; CHECK-NOCPA-O0-NEXT:    subs x0, x8, x9599; CHECK-NOCPA-O0-NEXT:    add sp, sp, #32600; CHECK-NOCPA-O0-NEXT:    ret601;602; CHECK-NOCPA-O3-LABEL: arith2:603; CHECK-NOCPA-O3:       // %bb.0: // %entry604; CHECK-NOCPA-O3-NEXT:    sub sp, sp, #32605; CHECK-NOCPA-O3-NEXT:    .cfi_def_cfa_offset 32606; CHECK-NOCPA-O3-NEXT:    str w3, [sp, #4]607; CHECK-NOCPA-O3-NEXT:    mov w9, #48 // =0x30608; CHECK-NOCPA-O3-NEXT:    ldrsw x8, [sp, #4]609; CHECK-NOCPA-O3-NEXT:    stp x1, x0, [sp, #16]610; CHECK-NOCPA-O3-NEXT:    str x2, [sp, #8]611; CHECK-NOCPA-O3-NEXT:    madd x8, x8, x9, x0612; CHECK-NOCPA-O3-NEXT:    ldr x8, [x8, #24]613; CHECK-NOCPA-O3-NEXT:    madd x8, x1, x2, x8614; CHECK-NOCPA-O3-NEXT:    sub x0, x8, x2615; CHECK-NOCPA-O3-NEXT:    add sp, sp, #32616; CHECK-NOCPA-O3-NEXT:    ret617entry:618  %5 = alloca ptr, align 8619  %6 = alloca i64, align 8620  %7 = alloca i64, align 8621  %8 = alloca i32, align 4622  store ptr %0, ptr %5, align 8623  store i64 %1, ptr %6, align 8624  store i64 %2, ptr %7, align 8625  store i32 %3, ptr %8, align 4626  %9 = load ptr, ptr %5, align 8627  %10 = load i32, ptr %8, align 4628  %11 = sext i32 %10 to i64629  %12 = getelementptr inbounds %struct.my_type2, ptr %9, i64 %11630  %13 = getelementptr inbounds %struct.my_type2, ptr %12, i32 0, i32 3631  %14 = load i64, ptr %13, align 8632  %15 = load i64, ptr %6, align 8633  %16 = load i64, ptr %7, align 8634  %17 = mul nsw i64 %15, %16635  %18 = add nsw i64 %14, %17636  %19 = sub nsw i64 %18, %16637  ret i64 %19638}639 640@a = hidden global [2 x [1 x [2 x i8]]] [[1 x [2 x i8]] [[2 x i8] c"\01\01"], [1 x [2 x i8]] [[2 x i8] c"\01\01"]], align 1641@b = hidden global i16 0, align 2642@.str = private unnamed_addr constant [7 x i8] c"hello\0A\00", align 1643 644define hidden void @multidim() {645; CHECK-CPA-O0-LABEL: multidim:646; CHECK-CPA-O0:       // %bb.0: // %entry647; CHECK-CPA-O0-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill648; CHECK-CPA-O0-NEXT:    .cfi_def_cfa_offset 16649; CHECK-CPA-O0-NEXT:    .cfi_offset w30, -16650; CHECK-CPA-O0-NEXT:    adrp x8, b651; CHECK-CPA-O0-NEXT:    ldrh w9, [x8, :lo12:b]652; CHECK-CPA-O0-NEXT:    mov w10, w9653; CHECK-CPA-O0-NEXT:    ldrh w8, [x8, :lo12:b]654; CHECK-CPA-O0-NEXT:    add w9, w8, #1655; CHECK-CPA-O0-NEXT:    // implicit-def: $x8656; CHECK-CPA-O0-NEXT:    mov w8, w9657; CHECK-CPA-O0-NEXT:    sxtw x9, w8658; CHECK-CPA-O0-NEXT:    mov w8, #2 // =0x2659; CHECK-CPA-O0-NEXT:    mov w11, w8660; CHECK-CPA-O0-NEXT:    adrp x8, a661; CHECK-CPA-O0-NEXT:    add x8, x8, :lo12:a662; CHECK-CPA-O0-NEXT:    addpt x8, x8, x11663; CHECK-CPA-O0-NEXT:    addpt x8, x8, x10, lsl #1664; CHECK-CPA-O0-NEXT:    addpt x8, x8, x9665; CHECK-CPA-O0-NEXT:    ldrb w8, [x8]666; CHECK-CPA-O0-NEXT:    cbz w8, .LBB14_2667; CHECK-CPA-O0-NEXT:    b .LBB14_1668; CHECK-CPA-O0-NEXT:  .LBB14_1:669; CHECK-CPA-O0-NEXT:    adrp x0, .L.str670; CHECK-CPA-O0-NEXT:    add x0, x0, :lo12:.L.str671; CHECK-CPA-O0-NEXT:    bl printf672; CHECK-CPA-O0-NEXT:    b .LBB14_2673; CHECK-CPA-O0-NEXT:  .LBB14_2:674; CHECK-CPA-O0-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload675; CHECK-CPA-O0-NEXT:    ret676;677; CHECK-CPA-O3-LABEL: multidim:678; CHECK-CPA-O3:       // %bb.0: // %entry679; CHECK-CPA-O3-NEXT:    adrp x8, b680; CHECK-CPA-O3-NEXT:    adrp x10, a+2681; CHECK-CPA-O3-NEXT:    add x10, x10, :lo12:a+2682; CHECK-CPA-O3-NEXT:    ldrh w9, [x8, :lo12:b]683; CHECK-CPA-O3-NEXT:    ldrh w8, [x8, :lo12:b]684; CHECK-CPA-O3-NEXT:    addpt x9, x10, x9, lsl #1685; CHECK-CPA-O3-NEXT:    addpt x8, x9, x8686; CHECK-CPA-O3-NEXT:    ldrb w8, [x8, #1]687; CHECK-CPA-O3-NEXT:    cbz w8, .LBB14_2688; CHECK-CPA-O3-NEXT:  // %bb.1:689; CHECK-CPA-O3-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill690; CHECK-CPA-O3-NEXT:    .cfi_def_cfa_offset 16691; CHECK-CPA-O3-NEXT:    .cfi_offset w30, -16692; CHECK-CPA-O3-NEXT:    adrp x0, .L.str693; CHECK-CPA-O3-NEXT:    add x0, x0, :lo12:.L.str694; CHECK-CPA-O3-NEXT:    bl printf695; CHECK-CPA-O3-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload696; CHECK-CPA-O3-NEXT:  .LBB14_2:697; CHECK-CPA-O3-NEXT:    ret698;699; CHECK-NOCPA-O0-LABEL: multidim:700; CHECK-NOCPA-O0:       // %bb.0: // %entry701; CHECK-NOCPA-O0-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill702; CHECK-NOCPA-O0-NEXT:    .cfi_def_cfa_offset 16703; CHECK-NOCPA-O0-NEXT:    .cfi_offset w30, -16704; CHECK-NOCPA-O0-NEXT:    adrp x8, b705; CHECK-NOCPA-O0-NEXT:    ldrh w9, [x8, :lo12:b]706; CHECK-NOCPA-O0-NEXT:    mov w10, w9707; CHECK-NOCPA-O0-NEXT:    ldrh w8, [x8, :lo12:b]708; CHECK-NOCPA-O0-NEXT:    add w9, w8, #1709; CHECK-NOCPA-O0-NEXT:    adrp x8, a710; CHECK-NOCPA-O0-NEXT:    add x8, x8, :lo12:a711; CHECK-NOCPA-O0-NEXT:    add x8, x8, #2712; CHECK-NOCPA-O0-NEXT:    add x8, x8, x10, lsl #1713; CHECK-NOCPA-O0-NEXT:    add x8, x8, w9, sxtw714; CHECK-NOCPA-O0-NEXT:    ldrb w8, [x8]715; CHECK-NOCPA-O0-NEXT:    cbz w8, .LBB14_2716; CHECK-NOCPA-O0-NEXT:    b .LBB14_1717; CHECK-NOCPA-O0-NEXT:  .LBB14_1:718; CHECK-NOCPA-O0-NEXT:    adrp x0, .L.str719; CHECK-NOCPA-O0-NEXT:    add x0, x0, :lo12:.L.str720; CHECK-NOCPA-O0-NEXT:    bl printf721; CHECK-NOCPA-O0-NEXT:    b .LBB14_2722; CHECK-NOCPA-O0-NEXT:  .LBB14_2:723; CHECK-NOCPA-O0-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload724; CHECK-NOCPA-O0-NEXT:    ret725;726; CHECK-NOCPA-O3-LABEL: multidim:727; CHECK-NOCPA-O3:       // %bb.0: // %entry728; CHECK-NOCPA-O3-NEXT:    adrp x8, b729; CHECK-NOCPA-O3-NEXT:    adrp x10, a+2730; CHECK-NOCPA-O3-NEXT:    add x10, x10, :lo12:a+2731; CHECK-NOCPA-O3-NEXT:    ldrh w9, [x8, :lo12:b]732; CHECK-NOCPA-O3-NEXT:    ldrh w8, [x8, :lo12:b]733; CHECK-NOCPA-O3-NEXT:    add x9, x10, x9, lsl #1734; CHECK-NOCPA-O3-NEXT:    add x8, x9, x8735; CHECK-NOCPA-O3-NEXT:    ldrb w8, [x8, #1]736; CHECK-NOCPA-O3-NEXT:    cbz w8, .LBB14_2737; CHECK-NOCPA-O3-NEXT:  // %bb.1:738; CHECK-NOCPA-O3-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill739; CHECK-NOCPA-O3-NEXT:    .cfi_def_cfa_offset 16740; CHECK-NOCPA-O3-NEXT:    .cfi_offset w30, -16741; CHECK-NOCPA-O3-NEXT:    adrp x0, .L.str742; CHECK-NOCPA-O3-NEXT:    add x0, x0, :lo12:.L.str743; CHECK-NOCPA-O3-NEXT:    bl printf744; CHECK-NOCPA-O3-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload745; CHECK-NOCPA-O3-NEXT:  .LBB14_2:746; CHECK-NOCPA-O3-NEXT:    ret747entry:748  %1 = load i16, ptr @b, align 2749  %2 = zext i16 %1 to i64750  %3 = getelementptr inbounds nuw [1 x [2 x i8]], ptr getelementptr inbounds ([2 x [1 x [2 x i8]]], ptr @a, i64 0, i64 1), i64 0, i64 %2751  %4 = load i16, ptr @b, align 2752  %5 = zext i16 %4 to i32753  %6 = add nsw i32 %5, 1754  %7 = sext i32 %6 to i64755  %8 = getelementptr inbounds [2 x i8], ptr %3, i64 0, i64 %7756  %9 = load i8, ptr %8, align 1757  %10 = icmp ne i8 %9, 0758  br i1 %10, label %11, label %13759 76011:761  %12 = call i32 (ptr, ...) @printf(ptr noundef @.str)762  br label %13763 76413:765  ret void766}767 768declare void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1)769declare i32 @printf(ptr noundef, ...) #1770 771!6 = !{i64 0, i64 8, !7, i64 8, i64 8, !7, i64 16, i64 8, !7, i64 24, i64 8, !7, i64 32, i64 8, !7, i64 40, i64 8, !7}772!7 = !{!8, !8, i64 0}773!8 = !{!"long", !9, i64 0}774!9 = !{!"omnipotent char", !10, i64 0}775!10 = !{!"Simple C++ TBAA"}776!11 = !{i64 0, i64 8, !7, i64 8, i64 8, !7}777