blob: d1ebb192744097d27cff0c69380021d55686cb7e [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt -S -passes="require<profile-summary>,function(codegenprepare)" %s -o - | FileCheck %s
target triple = "x86_64-unknown-linux-gnu"
define ptr @testNegativeResultIndexNUW(ptr %memory, ptr %blockaddress) {
; CHECK-LABEL: define ptr @testNegativeResultIndexNUW(
; CHECK-SAME: ptr [[MEMORY:%.*]], ptr [[BLOCKADDRESS:%.*]]) {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: [[POINTER:%.*]] = load ptr, ptr [[MEMORY]], align 8
; CHECK-NEXT: [[INITALGEP:%.*]] = getelementptr i8, ptr [[POINTER]], i64 8
; CHECK-NEXT: indirectbr ptr [[BLOCKADDRESS]], [label %[[EXIT:.*]]]
; CHECK: [[EXIT]]:
; CHECK-NEXT: [[UNMERGEDGEP:%.*]] = getelementptr i8, ptr [[INITALGEP]], i64 -1
; CHECK-NEXT: [[USEOFFIRSTGEP:%.*]] = load i8, ptr [[INITALGEP]], align 1
; CHECK-NEXT: ret ptr [[UNMERGEDGEP]]
;
entry:
%pointer = load ptr, ptr %memory, align 8
%initalGEP = getelementptr i8, ptr %pointer, i64 8
indirectbr ptr %blockaddress, [label %exit]
exit:
%unmergedGEP = getelementptr nuw i8, ptr %pointer, i64 7
%useOfFirstGEP = load i8, ptr %initalGEP, align 1
ret ptr %unmergedGEP
}
define ptr @testResultFlagIntersection(ptr %memory, ptr %blockaddress) {
; CHECK-LABEL: define ptr @testResultFlagIntersection(
; CHECK-SAME: ptr [[MEMORY:%.*]], ptr [[BLOCKADDRESS:%.*]]) {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: [[POINTER:%.*]] = load ptr, ptr [[MEMORY]], align 8
; CHECK-NEXT: [[INITALGEP:%.*]] = getelementptr i8, ptr [[POINTER]], i64 -1
; CHECK-NEXT: indirectbr ptr [[BLOCKADDRESS]], [label %[[EXIT:.*]]]
; CHECK: [[EXIT]]:
; CHECK-NEXT: [[UNMERGEDGEP1:%.*]] = getelementptr i8, ptr [[INITALGEP]], i64 2
; CHECK-NEXT: [[UNMERGEDGEP2:%.*]] = getelementptr i8, ptr [[INITALGEP]], i64 3
; CHECK-NEXT: [[USEOFFIRSTGEP:%.*]] = load i8, ptr [[INITALGEP]], align 1
; CHECK-NEXT: ret ptr [[UNMERGEDGEP1]]
;
entry:
%pointer = load ptr, ptr %memory, align 8
%initalGEP = getelementptr i8, ptr %pointer, i64 -1
indirectbr ptr %blockaddress, [label %exit]
exit:
%unmergedGEP1 = getelementptr nuw i8, ptr %pointer, i64 1
%unmergedGEP2 = getelementptr inbounds i8, ptr %pointer, i64 2
%useOfFirstGEP = load i8, ptr %initalGEP, align 1
ret ptr %unmergedGEP1
}