; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt < %s -instsimplify -S -verify | FileCheck %s ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Unary Operations ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; define @fneg( %val) { ; CHECK-LABEL: @fneg( ; CHECK-NEXT: ret undef ; %r = fneg undef ret %r } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Binary Operations ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; define @add() { ; CHECK-LABEL: @add( ; CHECK-NEXT: ret undef ; %r = add undef, undef ret %r } define @fadd() { ; CHECK-LABEL: @fadd( ; CHECK-NEXT: ret undef ; %r = fadd undef, undef ret %r } define @sub() { ; CHECK-LABEL: @sub( ; CHECK-NEXT: ret undef ; %r = sub undef, undef ret %r } define @sub_splat() { ; CHECK-LABEL: @sub_splat( ; CHECK-NEXT: ret shufflevector ( insertelement ( undef, i32 -16, i32 0), undef, zeroinitializer) ; %r = sub zeroinitializer, shufflevector ( insertelement ( undef, i32 16, i32 0), undef, zeroinitializer) ret %r } define @fsub() { ; CHECK-LABEL: @fsub( ; CHECK-NEXT: ret undef ; %r = fsub undef, undef ret %r } define @mul() { ; CHECK-LABEL: @mul( ; CHECK-NEXT: ret undef ; %r = mul undef, undef ret %r } define @fmul() { ; CHECK-LABEL: @fmul( ; CHECK-NEXT: ret undef ; %r = fmul undef, undef ret %r } define @udiv() { ; CHECK-LABEL: @udiv( ; CHECK-NEXT: ret undef ; %r = udiv undef, undef ret %r } define @udiv_splat_zero() { ; CHECK-LABEL: @udiv_splat_zero( ; CHECK-NEXT: ret undef ; %r = udiv zeroinitializer, zeroinitializer ret %r } define @sdiv() { ; CHECK-LABEL: @sdiv( ; CHECK-NEXT: ret undef ; %r = sdiv undef, undef ret %r } define @fdiv() { ; CHECK-LABEL: @fdiv( ; CHECK-NEXT: ret undef ; %r = fdiv undef, undef ret %r } define @urem() { ; CHECK-LABEL: @urem( ; CHECK-NEXT: ret undef ; %r = urem undef, undef ret %r } define @srem() { ; CHECK-LABEL: @srem( ; CHECK-NEXT: ret undef ; %r = srem undef, undef ret %r } define @frem() { ; CHECK-LABEL: @frem( ; CHECK-NEXT: ret undef ; %r = frem undef, undef ret %r } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Bitwise Binary Operations ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; define @shl() { ; CHECK-LABEL: @shl( ; CHECK-NEXT: ret undef ; %r = shl undef, undef ret %r } define @lshr() { ; CHECK-LABEL: @lshr( ; CHECK-NEXT: ret undef ; %r = lshr undef, undef ret %r } define @ashr() { ; CHECK-LABEL: @ashr( ; CHECK-NEXT: ret undef ; %r = ashr undef, undef ret %r } define @and() { ; CHECK-LABEL: @and( ; CHECK-NEXT: ret undef ; %r = and undef, undef ret %r } define @or() { ; CHECK-LABEL: @or( ; CHECK-NEXT: ret undef ; %r = or undef, undef ret %r } define @xor() { ; CHECK-LABEL: @xor( ; CHECK-NEXT: ret zeroinitializer ; %r = xor undef, undef ret %r } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Vector Operations ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; define @insertelement() { ; CHECK-LABEL: @insertelement( ; CHECK-NEXT: ret insertelement ( undef, i32 1, i32 0) ; %i = insertelement undef, i32 1, i32 0 ret %i } define @shufflevector() { ; CHECK-LABEL: @shufflevector( ; CHECK-NEXT: ret shufflevector ( insertelement ( undef, i32 1, i32 0), undef, zeroinitializer) ; %i = insertelement undef, i32 1, i32 0 %i2 = shufflevector %i, undef, zeroinitializer ret %i2 } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Memory Access and Addressing Operations ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; define @load() { ; CHECK-LABEL: @load( ; CHECK-NEXT: [[R:%.*]] = load , * getelementptr (, * null, i64 1), align 16 ; CHECK-NEXT: ret [[R]] ; %r = load , * getelementptr (, * null, i64 1) ret %r } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Conversion Operations ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; define @bitcast() { ; CHECK-LABEL: @bitcast( ; CHECK-NEXT: ret bitcast ( shufflevector ( insertelement ( undef, i32 1, i32 0), undef, zeroinitializer) to ) ; %i1 = insertelement undef, i32 1, i32 0 %i2 = shufflevector %i1, undef, zeroinitializer %i3 = bitcast %i2 to ret %i3 } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Other Operations ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; define @select() { ; CHECK-LABEL: @select( ; CHECK-NEXT: ret undef ; %r = select undef, zeroinitializer, undef ret %r } declare @llvm.something(, ) define @call() { ; CHECK-LABEL: @call( ; CHECK-NEXT: [[R:%.*]] = call @llvm.something( undef, undef) ; CHECK-NEXT: ret [[R]] ; %r = call @llvm.something( undef, undef) ret %r } define @icmp_undef() { ; CHECK-LABEL: @icmp_undef( ; CHECK-NEXT: ret undef ; %r = icmp eq undef, undef ret %r } define @icmp_zero() { ; CHECK-LABEL: @icmp_zero( ; CHECK-NEXT: ret shufflevector ( insertelement ( undef, i1 true, i32 0), undef, zeroinitializer) ; %r = icmp eq zeroinitializer, zeroinitializer ret %r } define @fcmp_true() { ; CHECK-LABEL: @fcmp_true( ; CHECK-NEXT: ret shufflevector ( insertelement ( undef, i1 true, i32 0), undef, zeroinitializer) ; %r = fcmp true undef, undef ret %r } define @fcmp_false() { ; CHECK-LABEL: @fcmp_false( ; CHECK-NEXT: ret zeroinitializer ; %r = fcmp false undef, undef ret %r } define @fcmp_undef() { ; CHECK-LABEL: @fcmp_undef( ; CHECK-NEXT: ret undef ; %r = icmp ne undef, undef ret %r } define @fcmp_not_equality() { ; CHECK-LABEL: @fcmp_not_equality( ; CHECK-NEXT: ret shufflevector ( insertelement ( undef, i1 true, i32 0), undef, zeroinitializer) ; %r = icmp ule undef, zeroinitializer ret %r }