================
@@ -12,22 +16,307 @@ void b0(int a, int b) {
   x = x | b;
 }
 
-// CHECK: %{{.+}} = cir.binop(mul, %{{.+}}, %{{.+}}) nsw : !s32i
-// CHECK: %{{.+}} = cir.binop(div, %{{.+}}, %{{.+}}) : !s32i
-// CHECK: %{{.+}} = cir.binop(rem, %{{.+}}, %{{.+}}) : !s32i
-// CHECK: %{{.+}} = cir.binop(add, %{{.+}}, %{{.+}}) nsw : !s32i
-// CHECK: %{{.+}} = cir.binop(sub, %{{.+}}, %{{.+}}) nsw : !s32i
-// CHECK: %{{.+}} = cir.binop(and, %{{.+}}, %{{.+}}) : !s32i
-// CHECK: %{{.+}} = cir.binop(xor, %{{.+}}, %{{.+}}) : !s32i
-// CHECK: %{{.+}} = cir.binop(or, %{{.+}}, %{{.+}}) : !s32i
+// CIR-LABEL: cir.func @b0(
+// CIR: %{{.+}} = cir.binop(mul, %{{.+}}, %{{.+}}) nsw : !s32i
+// CIR: %{{.+}} = cir.binop(div, %{{.+}}, %{{.+}}) : !s32i
+// CIR: %{{.+}} = cir.binop(rem, %{{.+}}, %{{.+}}) : !s32i
+// CIR: %{{.+}} = cir.binop(add, %{{.+}}, %{{.+}}) nsw : !s32i
+// CIR: %{{.+}} = cir.binop(sub, %{{.+}}, %{{.+}}) nsw : !s32i
+// CIR: %{{.+}} = cir.binop(and, %{{.+}}, %{{.+}}) : !s32i
+// CIR: %{{.+}} = cir.binop(xor, %{{.+}}, %{{.+}}) : !s32i
+// CIR: %{{.+}} = cir.binop(or, %{{.+}}, %{{.+}}) : !s32i
+// CIR: cir.return
+
+// LLVM-LABEL: define void @b0(
+// LLVM-SAME: i32 %[[A:.*]], i32 %[[B:.*]])
+// LLVM:         %[[A_ADDR:.*]] = alloca i32
+// LLVM:         %[[B_ADDR:.*]] = alloca i32
+// LLVM:         %[[X:.*]] = alloca i32
+// LLVM:         store i32 %[[A]], ptr %[[A_ADDR]]
+// LLVM:         store i32 %[[B]], ptr %[[B_ADDR]]
+
+// LLVM:         %[[A:.*]] = load i32, ptr %[[A_ADDR]]
+// LLVM:         %[[B:.*]] = load i32, ptr %[[B_ADDR]]
+// LLVM:         %[[MUL:.*]] = mul nsw i32 %[[A]], %[[B]]
+// LLVM:         store i32 %[[MUL]], ptr %[[X]]
+
+// LLVM:         %[[X1:.*]] = load i32, ptr %[[X]]
+// LLVM:         %[[B1:.*]] = load i32, ptr %[[B_ADDR]]
+// LLVM:         %[[DIV:.*]] = sdiv i32 %[[X1]], %[[B1]]
+// LLVM:         store i32 %[[DIV]], ptr %[[X]]
+
+// LLVM:         %[[X2:.*]] = load i32, ptr %[[X]]
+// LLVM:         %[[B2:.*]] = load i32, ptr %[[B_ADDR]]
+// LLVM:         %[[REM:.*]] = srem i32 %[[X2]], %[[B2]]
+// LLVM:         store i32 %[[REM]], ptr %[[X]]
+
+// LLVM:         %[[X3:.*]] = load i32, ptr %[[X]]
+// LLVM:         %[[B3:.*]] = load i32, ptr %[[B_ADDR]]
+// LLVM:         %[[ADD:.*]] = add nsw i32 %[[X3]], %[[B3]]
+// LLVM:         store i32 %[[ADD]], ptr %[[X]]
+
+// LLVM:         %[[X4:.*]] = load i32, ptr %[[X]]
+// LLVM:         %[[B4:.*]] = load i32, ptr %[[B_ADDR]]
+// LLVM:         %[[SUB:.*]] = sub nsw i32 %[[X4]], %[[B4]]
+// LLVM:         store i32 %[[SUB]], ptr %[[X]]
+
+// LLVM:         %[[X5:.*]] = load i32, ptr %[[X]]
+// LLVM:         %[[B5:.*]] = load i32, ptr %[[B_ADDR]]
+// LLVM:         %[[AND:.*]] = and i32 %[[X5]], %[[B5]]
+// LLVM:         store i32 %[[AND]], ptr %[[X]]
+
+// LLVM:         %[[X6:.*]] = load i32, ptr %[[X]]
+// LLVM:         %[[B6:.*]] = load i32, ptr %[[B_ADDR]]
+// LLVM:         %[[XOR:.*]] = xor i32 %[[X6]], %[[B6]]
+// LLVM:         store i32 %[[XOR]], ptr %[[X]]
+
+// LLVM:         %[[X7:.*]] = load i32, ptr %[[X]]
+// LLVM:         %[[B7:.*]] = load i32, ptr %[[B_ADDR]]
+// LLVM:         %[[OR:.*]] = or i32 %[[X7]], %[[B7]]
+// LLVM:         store i32 %[[OR]], ptr %[[X]]
+
+// LLVM:         ret void
+
+// OGCG-LABEL: define dso_local void @_Z2b0ii(i32 {{.*}} %a, i32 {{.*}} %b) 
{{.*}} { 
+// OGCG:         %[[A_ADDR:.*]] = alloca i32
+// OGCG:         %[[B_ADDR:.*]] = alloca i32
+// OGCG:         %[[X:.*]] = alloca i32
+// OGCG:         store i32 %a, ptr %[[A_ADDR]]
+// OGCG:         store i32 %b, ptr %[[B_ADDR]]
+
+// OGCG:         %[[A:.*]] = load i32, ptr %[[A_ADDR]]
+// OGCG:         %[[B:.*]] = load i32, ptr %[[B_ADDR]]
+// OGCG:         %[[MUL:.*]] = mul nsw i32 %[[A]], %[[B]]
+// OGCG:         store i32 %[[MUL]], ptr %[[X]]
+
+// OGCG:         %[[X1:.*]] = load i32, ptr %[[X]]
+// OGCG:         %[[B1:.*]] = load i32, ptr %[[B_ADDR]]
+// OGCG:         %[[DIV:.*]] = sdiv i32 %[[X1]], %[[B1]]
+// OGCG:         store i32 %[[DIV]], ptr %[[X]]
+
+// OGCG:         %[[X2:.*]] = load i32, ptr %[[X]]
+// OGCG:         %[[B2:.*]] = load i32, ptr %[[B_ADDR]]
+// OGCG:         %[[REM:.*]] = srem i32 %[[X2]], %[[B2]]
+// OGCG:         store i32 %[[REM]], ptr %[[X]]
+
+// OGCG:         %[[X3:.*]] = load i32, ptr %[[X]]
+// OGCG:         %[[B3:.*]] = load i32, ptr %[[B_ADDR]]
+// OGCG:         %[[ADD:.*]] = add nsw i32 %[[X3]], %[[B3]]
+// OGCG:         store i32 %[[ADD]], ptr %[[X]]
+
+// OGCG:         %[[X4:.*]] = load i32, ptr %[[X]]
+// OGCG:         %[[B4:.*]] = load i32, ptr %[[B_ADDR]]
+// OGCG:         %[[SUB:.*]] = sub nsw i32 %[[X4]], %[[B4]]
+// OGCG:         store i32 %[[SUB]], ptr %[[X]]
+
+// OGCG:         %[[X5:.*]] = load i32, ptr %[[X]]
+// OGCG:         %[[B5:.*]] = load i32, ptr %[[B_ADDR]]
+// OGCG:         %[[AND:.*]] = and i32 %[[X5]], %[[B5]]
+// OGCG:         store i32 %[[AND]], ptr %[[X]]
+
+// OGCG:         %[[X6:.*]] = load i32, ptr %[[X]]
+// OGCG:         %[[B6:.*]] = load i32, ptr %[[B_ADDR]]
+// OGCG:         %[[XOR:.*]] = xor i32 %[[X6]], %[[B6]]
+// OGCG:         store i32 %[[XOR]], ptr %[[X]]
+
+// OGCG:         %[[X7:.*]] = load i32, ptr %[[X]]
+// OGCG:         %[[B7:.*]] = load i32, ptr %[[B_ADDR]]
+// OGCG:         %[[OR:.*]] = or i32 %[[X7]], %[[B7]]
+// OGCG:         store i32 %[[OR]], ptr %[[X]]
+
+// OGCG:         ret void
 
 void testFloatingPointBinOps(float a, float b) {
   a * b;
-  // CHECK: cir.binop(mul, %{{.+}}, %{{.+}}) : !cir.float
   a / b;
-  // CHECK: cir.binop(div, %{{.+}}, %{{.+}}) : !cir.float
   a + b;
-  // CHECK: cir.binop(add, %{{.+}}, %{{.+}}) : !cir.float
   a - b;
-  // CHECK: cir.binop(sub, %{{.+}}, %{{.+}}) : !cir.float
 }
+
+// CIR-LABEL: cir.func @testFloatingPointBinOps(
+// CIR: cir.binop(mul, %{{.+}}, %{{.+}}) : !cir.float
+// CIR: cir.binop(div, %{{.+}}, %{{.+}}) : !cir.float
+// CIR: cir.binop(add, %{{.+}}, %{{.+}}) : !cir.float
+// CIR: cir.binop(sub, %{{.+}}, %{{.+}}) : !cir.float
+// CIR: cir.return
+
+// LLVM-LABEL: define void @testFloatingPointBinOps(
+// LLVM-SAME: float %[[A:.*]], float %[[B:.*]])
+// LLVM:         %[[A_ADDR:.*]] = alloca float, i64 1
+// LLVM:         %[[B_ADDR:.*]] = alloca float, i64 1
+// LLVM:         store float %[[A]], ptr %[[A_ADDR]]
+// LLVM:         store float %[[B]], ptr %[[B_ADDR]]
+
+// LLVM:         %[[A1:.*]] = load float, ptr %[[A_ADDR]]
+// LLVM:         %[[B1:.*]] = load float, ptr %[[B_ADDR]]
+// LLVM:         fmul float %[[A1]], %[[B1]]
+
+// LLVM:         %[[A2:.*]] = load float, ptr %[[A_ADDR]]
+// LLVM:         %[[B2:.*]] = load float, ptr %[[B_ADDR]]
+// LLVM:         fdiv float %[[A2]], %[[B2]]
+
+// LLVM:         %[[A3:.*]] = load float, ptr %[[A_ADDR]]
+// LLVM:         %[[B3:.*]] = load float, ptr %[[B_ADDR]]
+// LLVM:         fadd float %[[A3]], %[[B3]]
+
+// LLVM:         %[[A4:.*]] = load float, ptr %[[A_ADDR]]
+// LLVM:         %[[B4:.*]] = load float, ptr %[[B_ADDR]]
+// LLVM:         fsub float %[[A4]], %[[B4]]
+
+// LLVM:         ret void
+
+// OGCG-LABEL: define dso_local void @_Z23testFloatingPointBinOpsff(float 
{{.*}} %a, float {{.*}} %b)
+// OGCG:         %a.addr = alloca float
+// OGCG:         %b.addr = alloca float
+// OGCG:         store float %a, ptr %a.addr
+// OGCG:         store float %b, ptr %b.addr
+
+// OGCG:         %[[A1:.*]] = load float, ptr %a.addr
+// OGCG:         %[[B1:.*]] = load float, ptr %b.addr
+// OGCG:         fmul float %[[A1]], %[[B1]]
+
+// OGCG:         %[[A2:.*]] = load float, ptr %a.addr
+// OGCG:         %[[B2:.*]] = load float, ptr %b.addr
+// OGCG:         fdiv float %[[A2]], %[[B2]]
+
+// OGCG:         %[[A3:.*]] = load float, ptr %a.addr
+// OGCG:         %[[B3:.*]] = load float, ptr %b.addr
+// OGCG:         fadd float %[[A3]], %[[B3]]
+
+// OGCG:         %[[A4:.*]] = load float, ptr %a.addr
+// OGCG:         %[[B4:.*]] = load float, ptr %b.addr
+// OGCG:         fsub float %[[A4]], %[[B4]]
+
+// OGCG:         ret void
+
+void signed_shift(int a, int b) {
----------------
andykaylor wrote:

Can you add cases where the shift value needs `zext` and `sext`?

https://github.com/llvm/llvm-project/pull/133405
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to