首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用llvm::IRBuilder Create Add/Sub/Mul/Div?

如何使用llvm::IRBuilder Create Add/Sub/Mul/Div?
EN

Stack Overflow用户
提问于 2020-04-14 20:26:54
回答 2查看 385关注 0票数 0

我正在尝试使用llvm::IRBuilder创建Add/Sub/Mul/Div操作。但是https://llvm.org/doxygen/classllvm_1_1IRBuilder.html#a4ef70bab263e38c5e0b8c1bf95a5d814中有很多apis

代码语言:javascript
运行
复制
Value *     CreateAdd (Value *LHS, Value *RHS, const Twine &Name="", bool HasNUW=false, bool HasNSW=false);
Value *     CreateNSWAdd (Value *LHS, Value *RHS, const Twine &Name="");
Value *     CreateNUWAdd (Value *LHS, Value *RHS, const Twine &Name="");
Value *     CreateSub (Value *LHS, Value *RHS, const Twine &Name="", bool HasNUW=false, bool HasNSW=false);
Value *     CreateNSWSub (Value *LHS, Value *RHS, const Twine &Name="");
Value *     CreateNUWSub (Value *LHS, Value *RHS, const Twine &Name="");
Value *     CreateMul (Value *LHS, Value *RHS, const Twine &Name="", bool HasNUW=false, bool HasNSW=false);
Value *     CreateNSWMul (Value *LHS, Value *RHS, const Twine &Name="");
Value *     CreateNUWMul (Value *LHS, Value *RHS, const Twine &Name="");
Value *     CreateUDiv (Value *LHS, Value *RHS, const Twine &Name="", bool isExact=false);
Value *     CreateExactUDiv (Value *LHS, Value *RHS, const Twine &Name="");
Value *     CreateSDiv (Value *LHS, Value *RHS, const Twine &Name="", bool isExact=false);
Value *     CreateExactSDiv (Value *LHS, Value *RHS, const Twine &Name="");

当我想要生成Add/Sub/Mul/Div操作时,我应该使用哪一个?

EN

回答 2

Stack Overflow用户

发布于 2020-04-14 23:05:31

NSW (No Signed Wrap)NUS(No Unsigned Wrap)

当运算结果落在带符号整数类型的可表示范围之外时,就会发生带符号整数溢出。对于say和Add运算,如果您希望运算结果在超过最大值时对该整数类型的MAX_INT进行换行(即$(2)^(32)$ -1,表示无符号i32),请使用CreateAdd

通过回绕,我们的意思是如果它的值超过MAX_INT(溢出),那么它就被设置为MIN_INT。CreateNSWAdd将允许对无符号整数进行包装,但会为有符号整数生成毒值(未定义的行为)。CreateNUSAdd将生成一个加法操作,允许对有符号整数进行包装,但不允许对其无符号伙伴进行包装。

票数 3
EN

Stack Overflow用户

发布于 2021-11-30 04:54:01

代码语言:javascript
运行
复制
using System;
namespace ConsoleApp1
{
    class Program
    {

        public static int Addition(int value1, int value2)
        {
            return value1 + value2;
        }
        public static int Subtraction(int value1, int value2)
        {
            return value1 - value2;
        }
        public static int Multiplication(int value1, int value2)
        {
            return value1 * value2;
        }
        public static double Division(double value1, double value2)
        {
            return value1 / value2;
        }

        static void Main(string[] args)
        {
            while (true)
            {
                Console.Write("\nEnter Value 1 : ");
                int a = Convert.ToInt32(Console.ReadLine());
                Console.Write("Enter Value 2 : ");
                int b = Convert.ToInt32(Console.ReadLine());

                Console.WriteLine("Please Enter action to be performed :");
                Console.WriteLine("1. Addition");
                Console.WriteLine("2. Subtraction");
                Console.WriteLine("3. Multiplication");
                Console.WriteLine("4. Division");

                int action = Convert.ToInt32(Console.ReadLine());
                string _operation = "";
                double result = 0;
                switch (action)
                {
                    case 1:
                        {
                            result = Addition(a, b);
                            _operation = "+";
                            break;
                        }
                    case 2:
                        {
                            result = Subtraction(a, b);
                            _operation = "-";
                            break;
                        }
                    case 3:
                        {
                            result = Multiplication(a, b);
                            _operation = "*";
                            break;
                        }
                    case 4:
                        {
                            result = Division(a, b);
                            _operation = "/";
                            break;
                        }
                }
                Console.WriteLine("Result A {0} B = {1}", _operation, result);

                char theKey = Console.ReadKey().KeyChar;

                if (theKey == 'y' || theKey == 'Y')
                {
                    Console.Clear();
                    continue;
                }
                else
                {
                    break;
                }
            }


        } 
    }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61207663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档