llvm.org GIT mirror llvm / eb8bc2a test / Transforms / InstCombine / pr33765.ll

Tree @eb8bc2a (Download .tar.gz)

pr33765.ll @eb8bc2araw · history · blame

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -S %s -instcombine | FileCheck %s

@glob = external global i16

define void @patatino(i8 %beth) {
; CHECK-LABEL: @patatino(
; CHECK-NEXT:    [[CONV:%.*]] = zext i8 [[BETH:%.*]] to i32
; CHECK-NEXT:    br i1 undef, label [[IF_THEN9:%.*]], label [[IF_THEN9]]
; CHECK:       if.then9:
; CHECK-NEXT:    [[MUL:%.*]] = mul nuw nsw i32 [[CONV]], [[CONV]]
; CHECK-NEXT:    [[TINKY:%.*]] = load i16, i16* @glob, align 2
; CHECK-NEXT:    [[CONV131:%.*]] = zext i16 [[TINKY]] to i32
; CHECK-NEXT:    [[AND:%.*]] = and i32 [[MUL]], [[CONV131]]
; CHECK-NEXT:    [[CONV14:%.*]] = trunc i32 [[AND]] to i16
; CHECK-NEXT:    store i16 [[CONV14]], i16* @glob, align 2
; CHECK-NEXT:    ret void
  %conv = zext i8 %beth to i32
  %mul = mul nuw nsw i32 %conv, %conv
  %conv3 = and i32 %mul, 255
  %tobool8 = icmp ne i32 %mul, %conv3
  br i1 %tobool8, label %if.then9, label %if.then9

  %tinky = load i16, i16* @glob
  %conv13 = sext i16 %tinky to i32
  %and = and i32 %mul, %conv13
  %conv14 = trunc i32 %and to i16
  store i16 %conv14, i16* @glob
  ret void