brintos

brintos / llvm-project-archived public Read only

0
0
Text · 28.7 KiB · aeeffde Raw
782 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=0 -fast-isel=0 %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=0 -fast-isel=0 %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK-CPA-O34; RUN: llc -mtriple=aarch64 -verify-machineinstrs --mattr=-cpa -O0 -global-isel=0 -fast-isel=0 %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK-NOCPA-O05; RUN: llc -mtriple=aarch64 -verify-machineinstrs --mattr=-cpa -O3 -global-isel=0 -fast-isel=0 %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:    ret45 46entry:47  %e2 = getelementptr inbounds %struct.my_type, ptr @array, i64 %index, i32 148  store i64 %arg, ptr %e2, align 849  ret void50}51 52define void @maddpt1(i32 %pos, ptr %val) {53; CHECK-CPA-O0-LABEL: maddpt1:54; CHECK-CPA-O0:       // %bb.0: // %entry55; CHECK-CPA-O0-NEXT:    // implicit-def: $x856; CHECK-CPA-O0-NEXT:    mov w8, w057; CHECK-CPA-O0-NEXT:    sxtw x8, w858; CHECK-CPA-O0-NEXT:    adrp x10, array259; CHECK-CPA-O0-NEXT:    add x10, x10, :lo12:array260; CHECK-CPA-O0-NEXT:    mov w9, #48 // =0x3061; CHECK-CPA-O0-NEXT:    // kill: def $x9 killed $w962; CHECK-CPA-O0-NEXT:    maddpt x8, x8, x9, x1063; CHECK-CPA-O0-NEXT:    ldr q0, [x1]64; CHECK-CPA-O0-NEXT:    ldr q1, [x1, #16]65; CHECK-CPA-O0-NEXT:    ldr q2, [x1, #32]66; CHECK-CPA-O0-NEXT:    str q2, [x8, #32]67; CHECK-CPA-O0-NEXT:    str q1, [x8, #16]68; CHECK-CPA-O0-NEXT:    str q0, [x8]69; CHECK-CPA-O0-NEXT:    ret70;71; CHECK-CPA-O3-LABEL: maddpt1:72; CHECK-CPA-O3:       // %bb.0: // %entry73; CHECK-CPA-O3-NEXT:    // kill: def $w0 killed $w0 def $x074; CHECK-CPA-O3-NEXT:    sxtw x9, w075; CHECK-CPA-O3-NEXT:    ldp q1, q0, [x1, #16]76; CHECK-CPA-O3-NEXT:    mov w8, #48 // =0x3077; CHECK-CPA-O3-NEXT:    adrp x10, array278; CHECK-CPA-O3-NEXT:    add x10, x10, :lo12:array279; CHECK-CPA-O3-NEXT:    ldr q2, [x1]80; CHECK-CPA-O3-NEXT:    maddpt x8, x9, x8, x1081; CHECK-CPA-O3-NEXT:    stp q1, q0, [x8, #16]82; CHECK-CPA-O3-NEXT:    str q2, [x8]83; CHECK-CPA-O3-NEXT:    ret84;85; CHECK-NOCPA-O0-LABEL: maddpt1:86; CHECK-NOCPA-O0:       // %bb.0: // %entry87; CHECK-NOCPA-O0-NEXT:    adrp x9, array288; CHECK-NOCPA-O0-NEXT:    add x9, x9, :lo12:array289; CHECK-NOCPA-O0-NEXT:    mov w8, #48 // =0x3090; CHECK-NOCPA-O0-NEXT:    smaddl x8, w0, w8, x991; CHECK-NOCPA-O0-NEXT:    ldr q0, [x1]92; CHECK-NOCPA-O0-NEXT:    ldr q1, [x1, #16]93; CHECK-NOCPA-O0-NEXT:    ldr q2, [x1, #32]94; CHECK-NOCPA-O0-NEXT:    str q2, [x8, #32]95; CHECK-NOCPA-O0-NEXT:    str q1, [x8, #16]96; CHECK-NOCPA-O0-NEXT:    str q0, [x8]97; CHECK-NOCPA-O0-NEXT:    ret98;99; CHECK-NOCPA-O3-LABEL: maddpt1:100; CHECK-NOCPA-O3:       // %bb.0: // %entry101; CHECK-NOCPA-O3-NEXT:    mov w8, #48 // =0x30102; CHECK-NOCPA-O3-NEXT:    adrp x9, array2103; CHECK-NOCPA-O3-NEXT:    add x9, x9, :lo12:array2104; CHECK-NOCPA-O3-NEXT:    smaddl x8, w0, w8, x9105; CHECK-NOCPA-O3-NEXT:    ldp q1, q0, [x1, #16]106; CHECK-NOCPA-O3-NEXT:    ldr q2, [x1]107; CHECK-NOCPA-O3-NEXT:    stp q1, q0, [x8, #16]108; CHECK-NOCPA-O3-NEXT:    str q2, [x8]109; CHECK-NOCPA-O3-NEXT:    ret110entry:111  %idxprom = sext i32 %pos to i64112  %arrayidx = getelementptr inbounds [10 x %struct.my_type2], ptr @array2, i64 0, i64 %idxprom113  tail call void @llvm.memcpy.p0.p0.i64(ptr align 8 dereferenceable(48) %arrayidx, ptr align 8 dereferenceable(48) %val, i64 48, i1 false)114  ret void115}116 117define void @msubpt1(i32 %index, i32 %elem) {118; CHECK-CPA-O0-LABEL: msubpt1:119; CHECK-CPA-O0:       // %bb.0: // %entry120; CHECK-CPA-O0-NEXT:    // implicit-def: $x8121; CHECK-CPA-O0-NEXT:    mov w8, w0122; CHECK-CPA-O0-NEXT:    sxtw x8, w8123; CHECK-CPA-O0-NEXT:    mov w9, #48 // =0x30124; CHECK-CPA-O0-NEXT:    // kill: def $x9 killed $w9125; CHECK-CPA-O0-NEXT:    mneg x8, x8, x9126; CHECK-CPA-O0-NEXT:    add x8, x8, #288127; CHECK-CPA-O0-NEXT:    adrp x9, array2128; CHECK-CPA-O0-NEXT:    add x9, x9, :lo12:array2129; CHECK-CPA-O0-NEXT:    addpt x8, x9, x8130; CHECK-CPA-O0-NEXT:    ldr q0, [x9, #96]131; CHECK-CPA-O0-NEXT:    ldr q1, [x9, #112]132; CHECK-CPA-O0-NEXT:    ldr q2, [x9, #128]133; CHECK-CPA-O0-NEXT:    str q2, [x8, #32]134; CHECK-CPA-O0-NEXT:    str q1, [x8, #16]135; CHECK-CPA-O0-NEXT:    str q0, [x8]136; CHECK-CPA-O0-NEXT:    ret137;138; CHECK-CPA-O3-LABEL: msubpt1:139; CHECK-CPA-O3:       // %bb.0: // %entry140; CHECK-CPA-O3-NEXT:    // kill: def $w0 killed $w0 def $x0141; CHECK-CPA-O3-NEXT:    sxtw x8, w0142; CHECK-CPA-O3-NEXT:    mov w9, #48 // =0x30143; CHECK-CPA-O3-NEXT:    mneg x8, x8, x9144; CHECK-CPA-O3-NEXT:    adrp x9, array2145; CHECK-CPA-O3-NEXT:    add x9, x9, :lo12:array2146; CHECK-CPA-O3-NEXT:    ldp q1, q0, [x9, #112]147; CHECK-CPA-O3-NEXT:    ldr q2, [x9, #96]148; CHECK-CPA-O3-NEXT:    add x8, x8, #288149; CHECK-CPA-O3-NEXT:    addpt x8, x9, x8150; CHECK-CPA-O3-NEXT:    stp q1, q0, [x8, #16]151; CHECK-CPA-O3-NEXT:    str q2, [x8]152; CHECK-CPA-O3-NEXT:    ret153;154; CHECK-NOCPA-O0-LABEL: msubpt1:155; CHECK-NOCPA-O0:       // %bb.0: // %entry156; CHECK-NOCPA-O0-NEXT:    // implicit-def: $x8157; CHECK-NOCPA-O0-NEXT:    mov w8, w0158; CHECK-NOCPA-O0-NEXT:    sxtw x8, w8159; CHECK-NOCPA-O0-NEXT:    mov w9, #48 // =0x30160; CHECK-NOCPA-O0-NEXT:    // kill: def $x9 killed $w9161; CHECK-NOCPA-O0-NEXT:    mneg x8, x8, x9162; CHECK-NOCPA-O0-NEXT:    adrp x9, array2163; CHECK-NOCPA-O0-NEXT:    add x9, x9, :lo12:array2164; CHECK-NOCPA-O0-NEXT:    add x8, x9, x8165; CHECK-NOCPA-O0-NEXT:    ldr q0, [x9, #96]166; CHECK-NOCPA-O0-NEXT:    ldr q1, [x9, #112]167; CHECK-NOCPA-O0-NEXT:    ldr q2, [x9, #128]168; CHECK-NOCPA-O0-NEXT:    str q2, [x8, #320]169; CHECK-NOCPA-O0-NEXT:    str q1, [x8, #304]170; CHECK-NOCPA-O0-NEXT:    str q0, [x8, #288]171; CHECK-NOCPA-O0-NEXT:    ret172;173; CHECK-NOCPA-O3-LABEL: msubpt1:174; CHECK-NOCPA-O3:       // %bb.0: // %entry175; CHECK-NOCPA-O3-NEXT:    // kill: def $w0 killed $w0 def $x0176; CHECK-NOCPA-O3-NEXT:    sxtw x8, w0177; CHECK-NOCPA-O3-NEXT:    mov w9, #48 // =0x30178; CHECK-NOCPA-O3-NEXT:    mneg x8, x8, x9179; CHECK-NOCPA-O3-NEXT:    adrp x9, array2180; CHECK-NOCPA-O3-NEXT:    add x9, x9, :lo12:array2181; CHECK-NOCPA-O3-NEXT:    ldp q1, q0, [x9, #112]182; CHECK-NOCPA-O3-NEXT:    ldr q2, [x9, #96]183; CHECK-NOCPA-O3-NEXT:    add x8, x9, x8184; CHECK-NOCPA-O3-NEXT:    stp q1, q0, [x8, #304]185; CHECK-NOCPA-O3-NEXT:    str q2, [x8, #288]186; CHECK-NOCPA-O3-NEXT:    ret187entry:188  %idx.ext = sext i32 %index to i64189  %idx.neg = sub nsw i64 0, %idx.ext190  %add.ptr = getelementptr inbounds %struct.my_type2, ptr getelementptr inbounds ([10 x %struct.my_type2], ptr @array2, i64 0, i64 6), i64 %idx.neg191  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 !6192  ret void193}194 195define void @subpt1(i32 %index, i32 %elem) {196; CHECK-CPA-O0-LABEL: subpt1:197; CHECK-CPA-O0:       // %bb.0: // %entry198; CHECK-CPA-O0-NEXT:    // implicit-def: $x8199; CHECK-CPA-O0-NEXT:    mov w8, w0200; CHECK-CPA-O0-NEXT:    sxtw x9, w8201; CHECK-CPA-O0-NEXT:    mov w8, #96 // =0x60202; CHECK-CPA-O0-NEXT:    // kill: def $x8 killed $w8203; CHECK-CPA-O0-NEXT:    subs x8, x8, x9, lsl #8204; CHECK-CPA-O0-NEXT:    adrp x9, array205; CHECK-CPA-O0-NEXT:    add x9, x9, :lo12:array206; CHECK-CPA-O0-NEXT:    addpt x8, x9, x8207; CHECK-CPA-O0-NEXT:    ldr q0, [x9, #32]208; CHECK-CPA-O0-NEXT:    str q0, [x8]209; CHECK-CPA-O0-NEXT:    ret210;211; CHECK-CPA-O3-LABEL: subpt1:212; CHECK-CPA-O3:       // %bb.0: // %entry213; CHECK-CPA-O3-NEXT:    // kill: def $w0 killed $w0 def $x0214; CHECK-CPA-O3-NEXT:    sxtw x8, w0215; CHECK-CPA-O3-NEXT:    mov w9, #96 // =0x60216; CHECK-CPA-O3-NEXT:    sub x8, x9, x8, lsl #8217; CHECK-CPA-O3-NEXT:    adrp x9, array218; CHECK-CPA-O3-NEXT:    add x9, x9, :lo12:array219; CHECK-CPA-O3-NEXT:    ldr q0, [x9, #32]220; CHECK-CPA-O3-NEXT:    addpt x8, x9, x8221; CHECK-CPA-O3-NEXT:    str q0, [x8]222; CHECK-CPA-O3-NEXT:    ret223;224; CHECK-NOCPA-O0-LABEL: subpt1:225; CHECK-NOCPA-O0:       // %bb.0: // %entry226; CHECK-NOCPA-O0-NEXT:    // implicit-def: $x8227; CHECK-NOCPA-O0-NEXT:    mov w8, w0228; CHECK-NOCPA-O0-NEXT:    sxtw x8, w8229; CHECK-NOCPA-O0-NEXT:    adrp x9, array230; CHECK-NOCPA-O0-NEXT:    add x9, x9, :lo12:array231; CHECK-NOCPA-O0-NEXT:    subs x8, x9, x8, lsl #8232; CHECK-NOCPA-O0-NEXT:    ldr q0, [x9, #32]233; CHECK-NOCPA-O0-NEXT:    str q0, [x8, #96]234; CHECK-NOCPA-O0-NEXT:    ret235;236; CHECK-NOCPA-O3-LABEL: subpt1:237; CHECK-NOCPA-O3:       // %bb.0: // %entry238; CHECK-NOCPA-O3-NEXT:    // kill: def $w0 killed $w0 def $x0239; CHECK-NOCPA-O3-NEXT:    sxtw x9, w0240; CHECK-NOCPA-O3-NEXT:    adrp x8, array241; CHECK-NOCPA-O3-NEXT:    add x8, x8, :lo12:array242; CHECK-NOCPA-O3-NEXT:    ldr q0, [x8, #32]243; CHECK-NOCPA-O3-NEXT:    sub x9, x8, x9, lsl #8244; CHECK-NOCPA-O3-NEXT:    str q0, [x9, #96]245; CHECK-NOCPA-O3-NEXT:    ret246entry:247  %conv = sext i32 %index to i64248  %mul.neg = mul nsw i64 %conv, -16249  %add.ptr = getelementptr inbounds %struct.my_type, ptr getelementptr inbounds ([10 x %struct.my_type], ptr @array, i64 0, i64 6), i64 %mul.neg250  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 !6251  ret void252}253 254define void @subpt2(i32 %index, i32 %elem) {255; CHECK-CPA-O0-LABEL: subpt2:256; CHECK-CPA-O0:       // %bb.0: // %entry257; CHECK-CPA-O0-NEXT:    mov w8, #96 // =0x60258; CHECK-CPA-O0-NEXT:    // kill: def $x8 killed $w8259; CHECK-CPA-O0-NEXT:    subs x8, x8, w0, sxtw #4260; CHECK-CPA-O0-NEXT:    adrp x9, array261; CHECK-CPA-O0-NEXT:    add x9, x9, :lo12:array262; CHECK-CPA-O0-NEXT:    addpt x8, x9, x8263; CHECK-CPA-O0-NEXT:    ldr q0, [x9, #32]264; CHECK-CPA-O0-NEXT:    str q0, [x8]265; CHECK-CPA-O0-NEXT:    ret266;267; CHECK-CPA-O3-LABEL: subpt2:268; CHECK-CPA-O3:       // %bb.0: // %entry269; CHECK-CPA-O3-NEXT:    mov w8, #96 // =0x60270; CHECK-CPA-O3-NEXT:    adrp x9, array271; CHECK-CPA-O3-NEXT:    add x9, x9, :lo12:array272; CHECK-CPA-O3-NEXT:    sub x8, x8, w0, sxtw #4273; CHECK-CPA-O3-NEXT:    ldr q0, [x9, #32]274; CHECK-CPA-O3-NEXT:    addpt x8, x9, x8275; CHECK-CPA-O3-NEXT:    str q0, [x8]276; CHECK-CPA-O3-NEXT:    ret277;278; CHECK-NOCPA-O0-LABEL: subpt2:279; CHECK-NOCPA-O0:       // %bb.0: // %entry280; CHECK-NOCPA-O0-NEXT:    adrp x9, array281; CHECK-NOCPA-O0-NEXT:    add x9, x9, :lo12:array282; CHECK-NOCPA-O0-NEXT:    subs x8, x9, w0, sxtw #4283; CHECK-NOCPA-O0-NEXT:    ldr q0, [x9, #32]284; CHECK-NOCPA-O0-NEXT:    str q0, [x8, #96]285; CHECK-NOCPA-O0-NEXT:    ret286;287; CHECK-NOCPA-O3-LABEL: subpt2:288; CHECK-NOCPA-O3:       // %bb.0: // %entry289; CHECK-NOCPA-O3-NEXT:    adrp x8, array290; CHECK-NOCPA-O3-NEXT:    add x8, x8, :lo12:array291; CHECK-NOCPA-O3-NEXT:    sub x9, x8, w0, sxtw #4292; CHECK-NOCPA-O3-NEXT:    ldr q0, [x8, #32]293; CHECK-NOCPA-O3-NEXT:    str q0, [x9, #96]294; CHECK-NOCPA-O3-NEXT:    ret295entry:296  %idx.ext = sext i32 %index to i64297  %idx.neg = sub nsw i64 0, %idx.ext298  %add.ptr = getelementptr inbounds %struct.my_type, ptr getelementptr inbounds ([10 x %struct.my_type], ptr @array, i64 0, i64 6), i64 %idx.neg299  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 !11300  ret void301}302 303define ptr @subpt3(ptr %ptr, i32 %index) {304; CHECK-CPA-O0-LABEL: subpt3:305; CHECK-CPA-O0:       // %bb.0: // %entry306; CHECK-CPA-O0-NEXT:    mov x8, #-8 // =0xfffffffffffffff8307; CHECK-CPA-O0-NEXT:    addpt x0, x0, x8308; CHECK-CPA-O0-NEXT:    ret309;310; CHECK-CPA-O3-LABEL: subpt3:311; CHECK-CPA-O3:       // %bb.0: // %entry312; CHECK-CPA-O3-NEXT:    mov x8, #-8 // =0xfffffffffffffff8313; CHECK-CPA-O3-NEXT:    addpt x0, x0, x8314; CHECK-CPA-O3-NEXT:    ret315;316; CHECK-NOCPA-O0-LABEL: subpt3:317; CHECK-NOCPA-O0:       // %bb.0: // %entry318; CHECK-NOCPA-O0-NEXT:    subs x0, x0, #8319; CHECK-NOCPA-O0-NEXT:    ret320;321; CHECK-NOCPA-O3-LABEL: subpt3:322; CHECK-NOCPA-O3:       // %bb.0: // %entry323; CHECK-NOCPA-O3-NEXT:    sub x0, x0, #8324; CHECK-NOCPA-O3-NEXT:    ret325entry:326  %incdec.ptr.i.i.i = getelementptr inbounds i64, ptr %ptr, i64 -1327  ret ptr %incdec.ptr.i.i.i328}329 330define i64 @subi64(i64 %ptr, i32 %index) {331; CHECK-CPA-O0-LABEL: subi64:332; CHECK-CPA-O0:       // %bb.0: // %entry333; CHECK-CPA-O0-NEXT:    subs x0, x0, #1334; CHECK-CPA-O0-NEXT:    ret335;336; CHECK-CPA-O3-LABEL: subi64:337; CHECK-CPA-O3:       // %bb.0: // %entry338; CHECK-CPA-O3-NEXT:    sub x0, x0, #1339; CHECK-CPA-O3-NEXT:    ret340;341; CHECK-NOCPA-O0-LABEL: subi64:342; CHECK-NOCPA-O0:       // %bb.0: // %entry343; CHECK-NOCPA-O0-NEXT:    subs x0, x0, #1344; CHECK-NOCPA-O0-NEXT:    ret345;346; CHECK-NOCPA-O3-LABEL: subi64:347; CHECK-NOCPA-O3:       // %bb.0: // %entry348; CHECK-NOCPA-O3-NEXT:    sub x0, x0, #1349; CHECK-NOCPA-O3-NEXT:    ret350entry:351  %incdec.ptr.i.i.i = add i64 %ptr, -1352  ret i64 %incdec.ptr.i.i.i353}354 355define i32 @subi32(i32 %ptr, i32 %index) {356; CHECK-CPA-O0-LABEL: subi32:357; CHECK-CPA-O0:       // %bb.0: // %entry358; CHECK-CPA-O0-NEXT:    subs w0, w0, #1359; CHECK-CPA-O0-NEXT:    ret360;361; CHECK-CPA-O3-LABEL: subi32:362; CHECK-CPA-O3:       // %bb.0: // %entry363; CHECK-CPA-O3-NEXT:    sub w0, w0, #1364; CHECK-CPA-O3-NEXT:    ret365;366; CHECK-NOCPA-O0-LABEL: subi32:367; CHECK-NOCPA-O0:       // %bb.0: // %entry368; CHECK-NOCPA-O0-NEXT:    subs w0, w0, #1369; CHECK-NOCPA-O0-NEXT:    ret370;371; CHECK-NOCPA-O3-LABEL: subi32:372; CHECK-NOCPA-O3:       // %bb.0: // %entry373; CHECK-NOCPA-O3-NEXT:    sub w0, w0, #1374; CHECK-NOCPA-O3-NEXT:    ret375entry:376  %incdec.ptr.i.i.i = add i32 %ptr, -1377  ret i32 %incdec.ptr.i.i.i378}379 380define i16 @subi16(i16 %ptr, i32 %index) {381; CHECK-CPA-O0-LABEL: subi16:382; CHECK-CPA-O0:       // %bb.0: // %entry383; CHECK-CPA-O0-NEXT:    subs w0, w0, #1384; CHECK-CPA-O0-NEXT:    ret385;386; CHECK-CPA-O3-LABEL: subi16:387; CHECK-CPA-O3:       // %bb.0: // %entry388; CHECK-CPA-O3-NEXT:    sub w0, w0, #1389; CHECK-CPA-O3-NEXT:    ret390;391; CHECK-NOCPA-O0-LABEL: subi16:392; CHECK-NOCPA-O0:       // %bb.0: // %entry393; CHECK-NOCPA-O0-NEXT:    subs w0, w0, #1394; CHECK-NOCPA-O0-NEXT:    ret395;396; CHECK-NOCPA-O3-LABEL: subi16:397; CHECK-NOCPA-O3:       // %bb.0: // %entry398; CHECK-NOCPA-O3-NEXT:    sub w0, w0, #1399; CHECK-NOCPA-O3-NEXT:    ret400entry:401  %incdec.ptr.i.i.i = add i16 %ptr, -1402  ret i16 %incdec.ptr.i.i.i403}404 405define i64 @addi64(i64 %ptr, i32 %index) {406; CHECK-CPA-O0-LABEL: addi64:407; CHECK-CPA-O0:       // %bb.0: // %entry408; CHECK-CPA-O0-NEXT:    add x0, x0, #1409; CHECK-CPA-O0-NEXT:    ret410;411; CHECK-CPA-O3-LABEL: addi64:412; CHECK-CPA-O3:       // %bb.0: // %entry413; CHECK-CPA-O3-NEXT:    add x0, x0, #1414; CHECK-CPA-O3-NEXT:    ret415;416; CHECK-NOCPA-O0-LABEL: addi64:417; CHECK-NOCPA-O0:       // %bb.0: // %entry418; CHECK-NOCPA-O0-NEXT:    add x0, x0, #1419; CHECK-NOCPA-O0-NEXT:    ret420;421; CHECK-NOCPA-O3-LABEL: addi64:422; CHECK-NOCPA-O3:       // %bb.0: // %entry423; CHECK-NOCPA-O3-NEXT:    add x0, x0, #1424; CHECK-NOCPA-O3-NEXT:    ret425entry:426  %incdec.ptr.i.i.i = add i64 %ptr, 1427  ret i64 %incdec.ptr.i.i.i428}429 430define i32 @addi32(i32 %ptr, i32 %index) {431; CHECK-CPA-O0-LABEL: addi32:432; CHECK-CPA-O0:       // %bb.0: // %entry433; CHECK-CPA-O0-NEXT:    add w0, w0, #1434; CHECK-CPA-O0-NEXT:    ret435;436; CHECK-CPA-O3-LABEL: addi32:437; CHECK-CPA-O3:       // %bb.0: // %entry438; CHECK-CPA-O3-NEXT:    add w0, w0, #1439; CHECK-CPA-O3-NEXT:    ret440;441; CHECK-NOCPA-O0-LABEL: addi32:442; CHECK-NOCPA-O0:       // %bb.0: // %entry443; CHECK-NOCPA-O0-NEXT:    add w0, w0, #1444; CHECK-NOCPA-O0-NEXT:    ret445;446; CHECK-NOCPA-O3-LABEL: addi32:447; CHECK-NOCPA-O3:       // %bb.0: // %entry448; CHECK-NOCPA-O3-NEXT:    add w0, w0, #1449; CHECK-NOCPA-O3-NEXT:    ret450entry:451  %incdec.ptr.i.i.i = add i32 %ptr, 1452  ret i32 %incdec.ptr.i.i.i453}454 455define i16 @addi16(i16 %ptr, i32 %index) {456; CHECK-CPA-O0-LABEL: addi16:457; CHECK-CPA-O0:       // %bb.0: // %entry458; CHECK-CPA-O0-NEXT:    add w0, w0, #1459; CHECK-CPA-O0-NEXT:    ret460;461; CHECK-CPA-O3-LABEL: addi16:462; CHECK-CPA-O3:       // %bb.0: // %entry463; CHECK-CPA-O3-NEXT:    add w0, w0, #1464; CHECK-CPA-O3-NEXT:    ret465;466; CHECK-NOCPA-O0-LABEL: addi16:467; CHECK-NOCPA-O0:       // %bb.0: // %entry468; CHECK-NOCPA-O0-NEXT:    add w0, w0, #1469; CHECK-NOCPA-O0-NEXT:    ret470;471; CHECK-NOCPA-O3-LABEL: addi16:472; CHECK-NOCPA-O3:       // %bb.0: // %entry473; CHECK-NOCPA-O3-NEXT:    add w0, w0, #1474; CHECK-NOCPA-O3-NEXT:    ret475entry:476  %incdec.ptr.i.i.i = add i16 %ptr, 1477  ret i16 %incdec.ptr.i.i.i478}479 480define i64 @arith1(i64 noundef %0, i64 noundef %1, i64 noundef %2) {481; CHECK-CPA-O0-LABEL: arith1:482; CHECK-CPA-O0:       // %bb.0: // %entry483; CHECK-CPA-O0-NEXT:    sub sp, sp, #32484; CHECK-CPA-O0-NEXT:    .cfi_def_cfa_offset 32485; CHECK-CPA-O0-NEXT:    str x0, [sp, #24]486; CHECK-CPA-O0-NEXT:    str x1, [sp, #16]487; CHECK-CPA-O0-NEXT:    str x2, [sp, #8]488; CHECK-CPA-O0-NEXT:    ldr x8, [sp, #24]489; CHECK-CPA-O0-NEXT:    ldr x9, [sp, #16]490; CHECK-CPA-O0-NEXT:    ldr x10, [sp, #8]491; CHECK-CPA-O0-NEXT:    mul x9, x9, x10492; CHECK-CPA-O0-NEXT:    add x0, x8, x9493; CHECK-CPA-O0-NEXT:    add sp, sp, #32494; CHECK-CPA-O0-NEXT:    ret495;496; CHECK-CPA-O3-LABEL: arith1:497; CHECK-CPA-O3:       // %bb.0: // %entry498; CHECK-CPA-O3-NEXT:    sub sp, sp, #32499; CHECK-CPA-O3-NEXT:    .cfi_def_cfa_offset 32500; CHECK-CPA-O3-NEXT:    madd x8, x1, x2, x0501; CHECK-CPA-O3-NEXT:    stp x1, x0, [sp, #16]502; CHECK-CPA-O3-NEXT:    str x2, [sp, #8]503; CHECK-CPA-O3-NEXT:    mov x0, x8504; CHECK-CPA-O3-NEXT:    add sp, sp, #32505; CHECK-CPA-O3-NEXT:    ret506;507; CHECK-NOCPA-O0-LABEL: arith1:508; CHECK-NOCPA-O0:       // %bb.0: // %entry509; CHECK-NOCPA-O0-NEXT:    sub sp, sp, #32510; CHECK-NOCPA-O0-NEXT:    .cfi_def_cfa_offset 32511; CHECK-NOCPA-O0-NEXT:    str x0, [sp, #24]512; CHECK-NOCPA-O0-NEXT:    str x1, [sp, #16]513; CHECK-NOCPA-O0-NEXT:    str x2, [sp, #8]514; CHECK-NOCPA-O0-NEXT:    ldr x8, [sp, #24]515; CHECK-NOCPA-O0-NEXT:    ldr x9, [sp, #16]516; CHECK-NOCPA-O0-NEXT:    ldr x10, [sp, #8]517; CHECK-NOCPA-O0-NEXT:    mul x9, x9, x10518; CHECK-NOCPA-O0-NEXT:    add x0, x8, x9519; CHECK-NOCPA-O0-NEXT:    add sp, sp, #32520; CHECK-NOCPA-O0-NEXT:    ret521;522; CHECK-NOCPA-O3-LABEL: arith1:523; CHECK-NOCPA-O3:       // %bb.0: // %entry524; CHECK-NOCPA-O3-NEXT:    sub sp, sp, #32525; CHECK-NOCPA-O3-NEXT:    .cfi_def_cfa_offset 32526; CHECK-NOCPA-O3-NEXT:    madd x8, x1, x2, x0527; CHECK-NOCPA-O3-NEXT:    stp x1, x0, [sp, #16]528; CHECK-NOCPA-O3-NEXT:    str x2, [sp, #8]529; CHECK-NOCPA-O3-NEXT:    mov x0, x8530; CHECK-NOCPA-O3-NEXT:    add sp, sp, #32531; CHECK-NOCPA-O3-NEXT:    ret532entry:533  %4 = alloca i64, align 8534  %5 = alloca i64, align 8535  %6 = alloca i64, align 8536  store i64 %0, ptr %4, align 8537  store i64 %1, ptr %5, align 8538  store i64 %2, ptr %6, align 8539  %7 = load i64, ptr %4, align 8540  %8 = load i64, ptr %5, align 8541  %9 = load i64, ptr %6, align 8542  %10 = mul nsw i64 %8, %9543  %11 = add nsw i64 %7, %10544  ret i64 %11545}546 547define i64 @arith2(ptr noundef %0, i64 noundef %1, i64 noundef %2, i32 noundef %3) {548; CHECK-CPA-O0-LABEL: arith2:549; CHECK-CPA-O0:       // %bb.0: // %entry550; CHECK-CPA-O0-NEXT:    sub sp, sp, #32551; CHECK-CPA-O0-NEXT:    .cfi_def_cfa_offset 32552; CHECK-CPA-O0-NEXT:    str x0, [sp, #24]553; CHECK-CPA-O0-NEXT:    str x1, [sp, #16]554; CHECK-CPA-O0-NEXT:    str x2, [sp, #8]555; CHECK-CPA-O0-NEXT:    str w3, [sp, #4]556; CHECK-CPA-O0-NEXT:    ldr x8, [sp, #24]557; CHECK-CPA-O0-NEXT:    ldrsw x9, [sp, #4]558; CHECK-CPA-O0-NEXT:    add x9, x9, x9, lsl #1559; CHECK-CPA-O0-NEXT:    addpt x8, x8, x9, lsl #4560; CHECK-CPA-O0-NEXT:    ldr x8, [x8, #24]561; CHECK-CPA-O0-NEXT:    ldr x10, [sp, #16]562; CHECK-CPA-O0-NEXT:    ldr x9, [sp, #8]563; CHECK-CPA-O0-NEXT:    mul x10, x10, x9564; CHECK-CPA-O0-NEXT:    add x8, x8, x10565; CHECK-CPA-O0-NEXT:    subs x0, x8, x9566; CHECK-CPA-O0-NEXT:    add sp, sp, #32567; CHECK-CPA-O0-NEXT:    ret568;569; CHECK-CPA-O3-LABEL: arith2:570; CHECK-CPA-O3:       // %bb.0: // %entry571; CHECK-CPA-O3-NEXT:    sub sp, sp, #32572; CHECK-CPA-O3-NEXT:    .cfi_def_cfa_offset 32573; CHECK-CPA-O3-NEXT:    // kill: def $w3 killed $w3 def $x3574; CHECK-CPA-O3-NEXT:    sxtw x8, w3575; CHECK-CPA-O3-NEXT:    mov w9, #48 // =0x30576; CHECK-CPA-O3-NEXT:    stp x1, x0, [sp, #16]577; CHECK-CPA-O3-NEXT:    str x2, [sp, #8]578; CHECK-CPA-O3-NEXT:    maddpt x8, x8, x9, x0579; CHECK-CPA-O3-NEXT:    str w3, [sp, #4]580; CHECK-CPA-O3-NEXT:    ldr x8, [x8, #24]581; CHECK-CPA-O3-NEXT:    madd x8, x1, x2, x8582; CHECK-CPA-O3-NEXT:    sub x0, x8, x2583; CHECK-CPA-O3-NEXT:    add sp, sp, #32584; CHECK-CPA-O3-NEXT:    ret585;586; CHECK-NOCPA-O0-LABEL: arith2:587; CHECK-NOCPA-O0:       // %bb.0: // %entry588; CHECK-NOCPA-O0-NEXT:    sub sp, sp, #32589; CHECK-NOCPA-O0-NEXT:    .cfi_def_cfa_offset 32590; CHECK-NOCPA-O0-NEXT:    str x0, [sp, #24]591; CHECK-NOCPA-O0-NEXT:    str x1, [sp, #16]592; CHECK-NOCPA-O0-NEXT:    str x2, [sp, #8]593; CHECK-NOCPA-O0-NEXT:    str w3, [sp, #4]594; CHECK-NOCPA-O0-NEXT:    ldr x10, [sp, #24]595; CHECK-NOCPA-O0-NEXT:    ldrsw x8, [sp, #4]596; CHECK-NOCPA-O0-NEXT:    mov w9, #48 // =0x30597; CHECK-NOCPA-O0-NEXT:    mov w0, w9598; CHECK-NOCPA-O0-NEXT:    mov w9, w0599; CHECK-NOCPA-O0-NEXT:    // kill: def $w8 killed $w8 killed $x8600; CHECK-NOCPA-O0-NEXT:    smaddl x8, w8, w9, x10601; CHECK-NOCPA-O0-NEXT:    ldr x8, [x8, #24]602; CHECK-NOCPA-O0-NEXT:    ldr x10, [sp, #16]603; CHECK-NOCPA-O0-NEXT:    ldr x9, [sp, #8]604; CHECK-NOCPA-O0-NEXT:    mul x10, x10, x9605; CHECK-NOCPA-O0-NEXT:    add x8, x8, x10606; CHECK-NOCPA-O0-NEXT:    subs x0, x8, x9607; CHECK-NOCPA-O0-NEXT:    add sp, sp, #32608; CHECK-NOCPA-O0-NEXT:    ret609;610; CHECK-NOCPA-O3-LABEL: arith2:611; CHECK-NOCPA-O3:       // %bb.0: // %entry612; CHECK-NOCPA-O3-NEXT:    sub sp, sp, #32613; CHECK-NOCPA-O3-NEXT:    .cfi_def_cfa_offset 32614; CHECK-NOCPA-O3-NEXT:    mov w8, #48 // =0x30615; CHECK-NOCPA-O3-NEXT:    stp x1, x0, [sp, #16]616; CHECK-NOCPA-O3-NEXT:    smaddl x8, w3, w8, x0617; CHECK-NOCPA-O3-NEXT:    str x2, [sp, #8]618; CHECK-NOCPA-O3-NEXT:    str w3, [sp, #4]619; CHECK-NOCPA-O3-NEXT:    ldr x8, [x8, #24]620; CHECK-NOCPA-O3-NEXT:    madd x8, x1, x2, x8621; CHECK-NOCPA-O3-NEXT:    sub x0, x8, x2622; CHECK-NOCPA-O3-NEXT:    add sp, sp, #32623; CHECK-NOCPA-O3-NEXT:    ret624entry:625  %5 = alloca ptr, align 8626  %6 = alloca i64, align 8627  %7 = alloca i64, align 8628  %8 = alloca i32, align 4629  store ptr %0, ptr %5, align 8630  store i64 %1, ptr %6, align 8631  store i64 %2, ptr %7, align 8632  store i32 %3, ptr %8, align 4633  %9 = load ptr, ptr %5, align 8634  %10 = load i32, ptr %8, align 4635  %11 = sext i32 %10 to i64636  %12 = getelementptr inbounds %struct.my_type2, ptr %9, i64 %11637  %13 = getelementptr inbounds %struct.my_type2, ptr %12, i32 0, i32 3638  %14 = load i64, ptr %13, align 8639  %15 = load i64, ptr %6, align 8640  %16 = load i64, ptr %7, align 8641  %17 = mul nsw i64 %15, %16642  %18 = add nsw i64 %14, %17643  %19 = sub nsw i64 %18, %16644  ret i64 %19645}646 647@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 1648@b = hidden global i16 0, align 2649@.str = private unnamed_addr constant [7 x i8] c"hello\0A\00", align 1650 651define hidden void @multidim() {652; CHECK-CPA-O0-LABEL: multidim:653; CHECK-CPA-O0:       // %bb.0: // %entry654; CHECK-CPA-O0-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill655; CHECK-CPA-O0-NEXT:    .cfi_def_cfa_offset 16656; CHECK-CPA-O0-NEXT:    .cfi_offset w30, -16657; CHECK-CPA-O0-NEXT:    adrp x8, b658; CHECK-CPA-O0-NEXT:    ldrh w9, [x8, :lo12:b]659; CHECK-CPA-O0-NEXT:    // implicit-def: $x8660; CHECK-CPA-O0-NEXT:    mov w8, w9661; CHECK-CPA-O0-NEXT:    ubfiz x8, x8, #1, #32662; CHECK-CPA-O0-NEXT:    add x10, x8, #2663; CHECK-CPA-O0-NEXT:    adrp x8, a664; CHECK-CPA-O0-NEXT:    add x8, x8, :lo12:a665; CHECK-CPA-O0-NEXT:    addpt x8, x8, x10666; CHECK-CPA-O0-NEXT:    add w9, w9, #1667; CHECK-CPA-O0-NEXT:    mov w9, w9668; CHECK-CPA-O0-NEXT:    // kill: def $x9 killed $w9669; CHECK-CPA-O0-NEXT:    addpt x8, x8, x9670; CHECK-CPA-O0-NEXT:    ldrb w8, [x8]671; CHECK-CPA-O0-NEXT:    cbz w8, .LBB14_2672; CHECK-CPA-O0-NEXT:    b .LBB14_1673; CHECK-CPA-O0-NEXT:  .LBB14_1:674; CHECK-CPA-O0-NEXT:    adrp x0, .L.str675; CHECK-CPA-O0-NEXT:    add x0, x0, :lo12:.L.str676; CHECK-CPA-O0-NEXT:    bl printf677; CHECK-CPA-O0-NEXT:    b .LBB14_2678; CHECK-CPA-O0-NEXT:  .LBB14_2:679; CHECK-CPA-O0-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload680; CHECK-CPA-O0-NEXT:    ret681;682; CHECK-CPA-O3-LABEL: multidim:683; CHECK-CPA-O3:       // %bb.0: // %entry684; CHECK-CPA-O3-NEXT:    adrp x8, b685; CHECK-CPA-O3-NEXT:    adrp x10, a686; CHECK-CPA-O3-NEXT:    add x10, x10, :lo12:a687; CHECK-CPA-O3-NEXT:    ldrh w8, [x8, :lo12:b]688; CHECK-CPA-O3-NEXT:    lsl x9, x8, #1689; CHECK-CPA-O3-NEXT:    add x8, x8, #1690; CHECK-CPA-O3-NEXT:    add x9, x9, #2691; CHECK-CPA-O3-NEXT:    addpt x9, x10, x9692; CHECK-CPA-O3-NEXT:    addpt x8, x9, x8693; CHECK-CPA-O3-NEXT:    ldrb w8, [x8]694; CHECK-CPA-O3-NEXT:    cbz w8, .LBB14_2695; CHECK-CPA-O3-NEXT:  // %bb.1:696; CHECK-CPA-O3-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill697; CHECK-CPA-O3-NEXT:    .cfi_def_cfa_offset 16698; CHECK-CPA-O3-NEXT:    .cfi_offset w30, -16699; CHECK-CPA-O3-NEXT:    adrp x0, .L.str700; CHECK-CPA-O3-NEXT:    add x0, x0, :lo12:.L.str701; CHECK-CPA-O3-NEXT:    bl printf702; CHECK-CPA-O3-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload703; CHECK-CPA-O3-NEXT:  .LBB14_2:704; CHECK-CPA-O3-NEXT:    ret705;706; CHECK-NOCPA-O0-LABEL: multidim:707; CHECK-NOCPA-O0:       // %bb.0: // %entry708; CHECK-NOCPA-O0-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill709; CHECK-NOCPA-O0-NEXT:    .cfi_def_cfa_offset 16710; CHECK-NOCPA-O0-NEXT:    .cfi_offset w30, -16711; CHECK-NOCPA-O0-NEXT:    adrp x8, b712; CHECK-NOCPA-O0-NEXT:    ldrh w9, [x8, :lo12:b]713; CHECK-NOCPA-O0-NEXT:    adrp x8, a714; CHECK-NOCPA-O0-NEXT:    add x8, x8, :lo12:a715; CHECK-NOCPA-O0-NEXT:    add x8, x8, w9, uxtw #1716; CHECK-NOCPA-O0-NEXT:    add w9, w9, #1717; CHECK-NOCPA-O0-NEXT:    mov w9, w9718; CHECK-NOCPA-O0-NEXT:    // kill: def $x9 killed $w9719; CHECK-NOCPA-O0-NEXT:    add x8, x8, x9720; CHECK-NOCPA-O0-NEXT:    ldrb w8, [x8, #2]721; CHECK-NOCPA-O0-NEXT:    cbz w8, .LBB14_2722; CHECK-NOCPA-O0-NEXT:    b .LBB14_1723; CHECK-NOCPA-O0-NEXT:  .LBB14_1:724; CHECK-NOCPA-O0-NEXT:    adrp x0, .L.str725; CHECK-NOCPA-O0-NEXT:    add x0, x0, :lo12:.L.str726; CHECK-NOCPA-O0-NEXT:    bl printf727; CHECK-NOCPA-O0-NEXT:    b .LBB14_2728; CHECK-NOCPA-O0-NEXT:  .LBB14_2:729; CHECK-NOCPA-O0-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload730; CHECK-NOCPA-O0-NEXT:    ret731;732; CHECK-NOCPA-O3-LABEL: multidim:733; CHECK-NOCPA-O3:       // %bb.0: // %entry734; CHECK-NOCPA-O3-NEXT:    adrp x8, b735; CHECK-NOCPA-O3-NEXT:    adrp x9, a736; CHECK-NOCPA-O3-NEXT:    add x9, x9, :lo12:a737; CHECK-NOCPA-O3-NEXT:    ldrh w8, [x8, :lo12:b]738; CHECK-NOCPA-O3-NEXT:    add x9, x9, x8, lsl #1739; CHECK-NOCPA-O3-NEXT:    add x8, x9, x8740; CHECK-NOCPA-O3-NEXT:    ldrb w8, [x8, #3]741; CHECK-NOCPA-O3-NEXT:    cbz w8, .LBB14_2742; CHECK-NOCPA-O3-NEXT:  // %bb.1:743; CHECK-NOCPA-O3-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill744; CHECK-NOCPA-O3-NEXT:    .cfi_def_cfa_offset 16745; CHECK-NOCPA-O3-NEXT:    .cfi_offset w30, -16746; CHECK-NOCPA-O3-NEXT:    adrp x0, .L.str747; CHECK-NOCPA-O3-NEXT:    add x0, x0, :lo12:.L.str748; CHECK-NOCPA-O3-NEXT:    bl printf749; CHECK-NOCPA-O3-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload750; CHECK-NOCPA-O3-NEXT:  .LBB14_2:751; CHECK-NOCPA-O3-NEXT:    ret752entry:753  %1 = load i16, ptr @b, align 2754  %2 = zext i16 %1 to i64755  %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 %2756  %4 = load i16, ptr @b, align 2757  %5 = zext i16 %4 to i32758  %6 = add nsw i32 %5, 1759  %7 = sext i32 %6 to i64760  %8 = getelementptr inbounds [2 x i8], ptr %3, i64 0, i64 %7761  %9 = load i8, ptr %8, align 1762  %10 = icmp ne i8 %9, 0763  br i1 %10, label %11, label %13764 76511:766  %12 = call i32 (ptr, ...) @printf(ptr noundef @.str)767  br label %13768 76913:770  ret void771}772 773declare void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1)774declare i32 @printf(ptr noundef, ...) #1775 776!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}777!7 = !{!8, !8, i64 0}778!8 = !{!"long", !9, i64 0}779!9 = !{!"omnipotent char", !10, i64 0}780!10 = !{!"Simple C++ TBAA"}781!11 = !{i64 0, i64 8, !7, i64 8, i64 8, !7}782