Files
clang-p2996/llvm/test/Transforms/SLPVectorizer/X86/phi_landingpad.ll
Alexey Bataev 28ac873bcb [SLP]Fix gathering of the scalars by not ignoring UndefValues.
The compiler should not ignore UndefValue when gathering the scalars,
otherwise the resulting code may be less defined than the original one.
Also, grouped scalars to insert them at first to reduce the analysis in
further passes.

Differential Revision: https://reviews.llvm.org/D105275
2021-07-02 04:46:48 -07:00

49 lines
1.5 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -slp-vectorizer -mtriple=x86_64-apple-macosx10.9.0 -S -o - | FileCheck %s
target datalayout = "f64:64:64-v64:64:64"
define void @test_phi_in_landingpad() personality i8*
; CHECK-LABEL: @test_phi_in_landingpad(
; CHECK-NEXT: entry:
; CHECK-NEXT: invoke void @foo()
; CHECK-NEXT: to label [[INNER:%.*]] unwind label [[LPAD:%.*]]
; CHECK: inner:
; CHECK-NEXT: invoke void @foo()
; CHECK-NEXT: to label [[DONE:%.*]] unwind label [[LPAD]]
; CHECK: lpad:
; CHECK-NEXT: [[TMP0:%.*]] = phi <2 x double> [ undef, [[ENTRY:%.*]] ], [ undef, [[INNER]] ]
; CHECK-NEXT: [[TMP1:%.*]] = landingpad { i8*, i32 }
; CHECK-NEXT: catch i8* null
; CHECK-NEXT: br label [[DONE]]
; CHECK: done:
; CHECK-NEXT: [[TMP2:%.*]] = phi <2 x double> [ undef, [[INNER]] ], [ [[TMP0]], [[LPAD]] ]
; CHECK-NEXT: ret void
;
bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
invoke void @foo()
to label %inner unwind label %lpad
inner:
%x0 = fsub double undef, undef
%y0 = fsub double undef, undef
invoke void @foo()
to label %done unwind label %lpad
lpad:
%x1 = phi double [ undef, %entry ], [ undef, %inner ]
%y1 = phi double [ undef, %entry ], [ undef, %inner ]
landingpad { i8*, i32 } catch i8* null
br label %done
done:
phi double [ %x0, %inner ], [ %x1, %lpad ]
phi double [ %y0, %inner ], [ %y1, %lpad ]
ret void
}
declare void @foo()
declare i32 @__gxx_personality_v0(...)