blob: f9320eb723f279eec26e7f1132df8bb8abea7e32 [file]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -passes=slp-vectorizer -mtriple=wasm32-unknown-unknown -mattr=+reference-types -S | FileCheck %s
; The SLP vectorizer used to try to vectorize the two externref PHIs
; below into a <2 x externref> and then crashed.
; Check that they are left alone and the vectorizer doesn't crash.
target datalayout = "e-m:e-p:32:32-p10:8:8-p20:8:8-i64:64-i128:128-n32:64-S128-ni:1:10:20"
target triple = "wasm32-unknown-unknown"
%externref = type target("wasm.externref")
declare %externref @foo()
declare void @bar(%externref)
define void @test(i32 %flag, %externref %ref1, %externref %ref2) {
; CHECK-LABEL: @test(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[FLAG:%.*]], 0
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
; CHECK: if.then:
; CHECK-NEXT: [[CALL:%.*]] = call target("wasm.externref") @foo()
; CHECK-NEXT: [[CALL1:%.*]] = call target("wasm.externref") @foo()
; CHECK-NEXT: br label [[IF_END]]
; CHECK: if.end:
; CHECK-NEXT: [[R1:%.*]] = phi target("wasm.externref") [ [[CALL]], [[IF_THEN]] ], [ [[REF1:%.*]], [[ENTRY:%.*]] ]
; CHECK-NEXT: [[R2:%.*]] = phi target("wasm.externref") [ [[CALL1]], [[IF_THEN]] ], [ [[REF2:%.*]], [[ENTRY]] ]
; CHECK-NEXT: call void @bar(target("wasm.externref") [[R1]])
; CHECK-NEXT: call void @bar(target("wasm.externref") [[R2]])
; CHECK-NEXT: ret void
;
entry:
%cmp = icmp ne i32 %flag, 0
br i1 %cmp, label %if.then, label %if.end
if.then:
%call = call %externref @foo()
%call1 = call %externref @foo()
br label %if.end
if.end:
%r1 = phi %externref [ %call, %if.then ], [ %ref1, %entry ]
%r2 = phi %externref [ %call1, %if.then ], [ %ref2, %entry ]
call void @bar(%externref %r1)
call void @bar(%externref %r2)
ret void
}