| ; 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 |
| } |