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