Please use GitHub pull requests for new patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
llvm/test/Transforms/TypePromotion/ARM/phi-zext-gep.ll
- This file was added.
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py | |||||
; RUN: opt -mtriple=arm -type-promotion -verify -S %s -o - | FileCheck %s | |||||
; Function Attrs: mustprogress nofree nosync nounwind uwtable | |||||
define dso_local void @foo(ptr noundef %ptr0, ptr nocapture noundef readonly %ptr1, ptr nocapture noundef %dest) local_unnamed_addr { | |||||
; CHECK-LABEL: @foo( | |||||
; CHECK-NEXT: entry: | |||||
; CHECK-NEXT: [[TMP0:%.*]] = load i8, ptr [[PTR0:%.*]], align 1 | |||||
; CHECK-NEXT: [[TMP1:%.*]] = zext i8 [[TMP0]] to i32 | |||||
; CHECK-NEXT: br label [[DO_BODY:%.*]] | |||||
; CHECK: do.body: | |||||
; CHECK-NEXT: [[TO_PROMOTE:%.*]] = phi i32 [ [[TMP1]], [[ENTRY:%.*]] ], [ [[TMP4:%.*]], [[DO_BODY]] ] | |||||
; CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, ptr [[PTR1:%.*]], i32 [[TO_PROMOTE]] | |||||
; CHECK-NEXT: [[TMP2:%.*]] = load i8, ptr [[ARRAYIDX1]], align 2 | |||||
; CHECK-NEXT: [[TMP3:%.*]] = zext i8 [[TMP2]] to i32 | |||||
; CHECK-NEXT: [[COND_IN_I:%.*]] = getelementptr inbounds i8, ptr [[PTR1]], i32 [[TMP3]] | |||||
; CHECK-NEXT: [[COND_I:%.*]] = load i8, ptr [[COND_IN_I]], align 1 | |||||
; CHECK-NEXT: [[TMP4]] = zext i8 [[COND_I]] to i32 | |||||
; CHECK-NEXT: store i8 [[TMP2]], ptr [[DEST:%.*]], align 1 | |||||
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[TMP4]], 0 | |||||
; CHECK-NEXT: br i1 [[CMP]], label [[DO_BODY]], label [[DO_END:%.*]] | |||||
; CHECK: do.end: | |||||
; CHECK-NEXT: ret void | |||||
; | |||||
entry: | |||||
%0 = load i8, ptr %ptr0, align 1 | |||||
br label %do.body | |||||
do.body: ; preds = %do.body, %entry | |||||
%to_promote = phi i8 [ %0, %entry ], [ %cond.i, %do.body ] | |||||
%ext0 = zext i8 %to_promote to i32 | |||||
%arrayidx1 = getelementptr inbounds i8, ptr %ptr1, i32 %ext0 | |||||
%1 = load i8, ptr %arrayidx1, align 2 | |||||
%2 = zext i8 %1 to i32 | |||||
%cond.in.i = getelementptr inbounds i8, ptr %ptr1, i32 %2 | |||||
%cond.i = load i8, ptr %cond.in.i, align 1 | |||||
store i8 %1, ptr %dest, align 1 | |||||
%cmp = icmp ult i8 %cond.i, 0 | |||||
br i1 %cmp, label %do.body, label %do.end | |||||
do.end: ; preds = %do.body | |||||
ret void | |||||
} |