; This is a very early test that just checks the representation of i32 ; arithmetic instructions. No assembly tests are done. ; REQUIRES: allow_dump ; RUN: %p2i -i %s --filetype=asm --args --verbose inst -threads=0 \ ; RUN: -allow-externally-defined-symbols | FileCheck %s define internal i32 @Add(i32 %a, i32 %b) { ; CHECK: define internal i32 @Add entry: %add = add i32 %b, %a ; CHECK: add tail call void @Use(i32 %add) ; CHECK: call Use ret i32 %add } declare void @Use(i32) define internal i32 @And(i32 %a, i32 %b) { ; CHECK: define internal i32 @And entry: %and = and i32 %b, %a ; CHECK: and tail call void @Use(i32 %and) ; CHECK: call Use ret i32 %and } define internal i32 @Or(i32 %a, i32 %b) { ; CHECK: define internal i32 @Or entry: %or = or i32 %b, %a ; CHECK: or tail call void @Use(i32 %or) ; CHECK: call Use ret i32 %or } define internal i32 @Xor(i32 %a, i32 %b) { ; CHECK: define internal i32 @Xor entry: %xor = xor i32 %b, %a ; CHECK: xor tail call void @Use(i32 %xor) ; CHECK: call Use ret i32 %xor } define internal i32 @Sub(i32 %a, i32 %b) { ; CHECK: define internal i32 @Sub entry: %sub = sub i32 %a, %b ; CHECK: sub tail call void @Use(i32 %sub) ; CHECK: call Use ret i32 %sub } define internal i32 @Mul(i32 %a, i32 %b) { ; CHECK: define internal i32 @Mul entry: %mul = mul i32 %b, %a ; CHECK: imul tail call void @Use(i32 %mul) ; CHECK: call Use ret i32 %mul } define internal i32 @Sdiv(i32 %a, i32 %b) { ; CHECK: define internal i32 @Sdiv entry: %div = sdiv i32 %a, %b ; CHECK: cdq ; CHECK: idiv tail call void @Use(i32 %div) ; CHECK: call Use ret i32 %div } define internal i32 @Srem(i32 %a, i32 %b) { ; CHECK: define internal i32 @Srem entry: %rem = srem i32 %a, %b ; CHECK: cdq ; CHECK: idiv tail call void @Use(i32 %rem) ; CHECK: call Use ret i32 %rem } define internal i32 @Udiv(i32 %a, i32 %b) { ; CHECK: define internal i32 @Udiv entry: %div = udiv i32 %a, %b ; CHECK: div tail call void @Use(i32 %div) ; CHECK: call Use ret i32 %div } define internal i32 @Urem(i32 %a, i32 %b) { ; CHECK: define internal i32 @Urem entry: %rem = urem i32 %a, %b ; CHECK: div tail call void @Use(i32 %rem) ; CHECK: call Use ret i32 %rem } ; Check for a valid addressing mode in the x86-32 mul instruction when ; the second source operand is an immediate. define internal i64 @MulImm() { entry: %mul = mul i64 3, 4 ret i64 %mul } ; CHECK-LABEL: MulImm ; CHECK-NOT: mul {{[0-9]+}}