brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · 129da3f Raw
81 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 42; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4@glob = internal global [10 x [10 x [10 x i32]]] zeroinitializer5 6define ptr @x12(i64 %x) {7; CHECK-LABEL: define ptr @x12(8; CHECK-SAME: i64 [[X:%.*]]) {9; CHECK-NEXT:  entry:10; CHECK-NEXT:    [[GEP_IDX:%.*]] = mul nsw i64 [[X]], 40011; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i8, ptr getelementptr inbounds nuw (i8, ptr @glob, i64 84), i64 [[GEP_IDX]]12; CHECK-NEXT:    ret ptr [[GEP]]13;14entry:15  %gep = getelementptr inbounds [10 x [10 x [10 x i32]]], ptr getelementptr (i8, ptr @glob, i64 36), i64 0, i64 %x, i64 1, i64 216  ret ptr %gep17}18 19define ptr @x1y(i64 %x, i64 %y) {20; CHECK-LABEL: define ptr @x1y(21; CHECK-SAME: i64 [[X:%.*]], i64 [[Y:%.*]]) {22; CHECK-NEXT:  entry:23; CHECK-NEXT:    [[GEP_IDX:%.*]] = mul nsw i64 [[X]], 40024; CHECK-NEXT:    [[GEP_IDX1:%.*]] = shl nsw i64 [[Y]], 225; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr i8, ptr getelementptr inbounds nuw (i8, ptr @glob, i64 116), i64 [[GEP_IDX]]26; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i8, ptr [[TMP0]], i64 [[GEP_IDX1]]27; CHECK-NEXT:    ret ptr [[GEP]]28;29entry:30  %gep = getelementptr inbounds [10 x [10 x [10 x i32]]], ptr getelementptr (i8, ptr @glob, i64 36), i64 0, i64 %x, i64 2, i64 %y31  ret ptr %gep32}33 34define ptr @xzy(i64 %x, i64 %y, i64 %z) {35; CHECK-LABEL: define ptr @xzy(36; CHECK-SAME: i64 [[X:%.*]], i64 [[Y:%.*]], i64 [[Z:%.*]]) {37; CHECK-NEXT:  entry:38; CHECK-NEXT:    [[GEP_SPLIT:%.*]] = getelementptr inbounds [10 x [10 x i32]], ptr getelementptr inbounds nuw (i8, ptr @glob, i64 40), i64 [[X]]39; CHECK-NEXT:    [[GEP_SPLIT1:%.*]] = getelementptr inbounds [10 x i32], ptr [[GEP_SPLIT]], i64 [[Z]]40; CHECK-NEXT:    [[GEP:%.*]] = getelementptr inbounds i32, ptr [[GEP_SPLIT1]], i64 [[Y]]41; CHECK-NEXT:    ret ptr [[GEP]]42;43entry:44  %gep = getelementptr inbounds [10 x [10 x [10 x i32]]], ptr getelementptr (i8, ptr @glob, i64 40), i64 0, i64 %x, i64 %z, i64 %y45  ret ptr %gep46}47 48define ptr @zerox(i64 %x) {49; CHECK-LABEL: define ptr @zerox(50; CHECK-SAME: i64 [[X:%.*]]) {51; CHECK-NEXT:  entry:52; CHECK-NEXT:    [[GEP:%.*]] = getelementptr inbounds i32, ptr getelementptr inbounds nuw (i8, ptr @glob, i64 32), i64 [[X]]53; CHECK-NEXT:    ret ptr [[GEP]]54;55entry:56  %gep = getelementptr inbounds [10 x i32], ptr getelementptr (i8, ptr @glob, i64 32), i64 0, i64 %x57  ret ptr %gep58}59 60define i32 @twoloads(i64 %x) {61; CHECK-LABEL: define i32 @twoloads(62; CHECK-SAME: i64 [[X:%.*]]) {63; CHECK-NEXT:  entry:64; CHECK-NEXT:    [[GEP1_IDX:%.*]] = mul nsw i64 [[X]], 40065; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr i8, ptr getelementptr inbounds nuw (i8, ptr @glob, i64 134), i64 [[GEP1_IDX]]66; CHECK-NEXT:    [[GEP2_IDX:%.*]] = mul nsw i64 [[X]], 40067; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr i8, ptr getelementptr inbounds nuw (i8, ptr @glob, i64 132), i64 [[GEP2_IDX]]68; CHECK-NEXT:    [[A:%.*]] = load i32, ptr [[GEP1]], align 469; CHECK-NEXT:    [[B:%.*]] = load i32, ptr [[GEP2]], align 470; CHECK-NEXT:    [[C:%.*]] = add i32 [[A]], [[B]]71; CHECK-NEXT:    ret i32 [[C]]72;73entry:74  %gep1 = getelementptr inbounds [10 x [10 x [10 x i32]]], ptr getelementptr (i8, ptr @glob, i64 50), i64 0, i64 %x, i64 2, i64 175  %gep2 = getelementptr inbounds [10 x [10 x [10 x i32]]], ptr getelementptr (i8, ptr @glob, i64 36), i64 0, i64 %x, i64 2, i64 476  %a = load i32, ptr %gep177  %b = load i32, ptr %gep278  %c = add i32 %a, %b79  ret i32 %c80}81