Files
clang-p2996/llvm/test/Transforms/InstCombine/pr51824.ll
Nuno Lopes 952e069393 [NFC] remove 'br undef' from InstCombine test cases
This is UB and allows the compiler to give any result, so these tests weren't meaningful
InstCombine tests are now clean of 'br undef'
2022-06-10 15:28:57 +01:00

47 lines
1.8 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -passes=instcombine -S | FileCheck %s
; OSS-Fuzz: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=38057
define void @PR51824(<4 x i16> %idxs, i32* %ptr, i1 %c1, <4 x i32>* %ptr2) {
; CHECK-LABEL: @PR51824(
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[BB:%.*]]
; CHECK: BB:
; CHECK-NEXT: br i1 [[C1:%.*]], label [[BB]], label [[BB1:%.*]]
; CHECK: BB1:
; CHECK-NEXT: ret void
;
entry:
%C7 = icmp sgt i1 false, true
%B2 = lshr i16 -32768, 0
%C1 = icmp uge i16 %B2, %B2
%E9 = extractelement <4 x i16> zeroinitializer, i16 %B2
%I2 = insertelement <4 x i16> poison, i16 %E9, i16 0
%i = sext <4 x i16> %I2 to <4 x i32>
%i1 = getelementptr inbounds i64, i64* null, <4 x i32> %i
%i2 = ptrtoint <4 x i64*> %i1 to <4 x i32>
%E2 = extractelement <4 x i32> %i2, i16 0
br label %BB
BB: ; preds = %BB, %entry
%A15 = alloca <4 x i32>, align 16
%L2 = load <4 x i32>, <4 x i32>* %A15, align 16
%G1 = getelementptr i64, i64* null, i32 %E2
%i3 = getelementptr inbounds i64, i64* %G1, <4 x i16> %idxs
%i4 = ptrtoint <4 x i64*> %i3 to <4 x i32>
%E22 = extractelement <4 x i32> %L2, i1 false
%E8 = extractelement <4 x i32> %i4, i1 false
%I10 = insertelement <4 x i32> undef, i32 undef, i32 %E8
%I19 = insertelement <4 x i32> %I10, i32 %E22, i16 0
%S7 = shufflevector <4 x i32> %I19, <4 x i32> %L2, <4 x i32> poison
%I8 = insertelement <4 x i32> %I19, i32 0, i1 %C1
%E10 = extractelement <4 x i32> %I8, i1 poison
store i32 %E10, i32* %ptr, align 4
br i1 %c1, label %BB, label %BB1
BB1: ; preds = %BB
%S8 = shufflevector <4 x i32> %I10, <4 x i32> %S7, <4 x i32> undef
store <4 x i32> %S8, <4 x i32>* %ptr2, align 16
ret void
}