[llvm] 7fcbf13 - [InstCombine] add casted bitwise logic tests to show missing use check; NFC

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Fri May 20 06:12:41 PDT 2022


Author: Sanjay Patel
Date: 2022-05-20T09:08:53-04:00
New Revision: 7fcbf133ba9d1228bdc305b5183d9879e516045a

URL: https://github.com/llvm/llvm-project/commit/7fcbf133ba9d1228bdc305b5183d9879e516045a
DIFF: https://github.com/llvm/llvm-project/commit/7fcbf133ba9d1228bdc305b5183d9879e516045a.diff

LOG: [InstCombine] add casted bitwise logic tests to show missing use check; NFC

While here, update the auto-generated checks to also check
the match the function parameters - there was a potential
miscompile that would go unnoticed with the more lenient
check lines.

Added: 
    

Modified: 
    llvm/test/Transforms/InstCombine/and-xor-or.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/and-xor-or.ll b/llvm/test/Transforms/InstCombine/and-xor-or.ll
index f3ab4aca12446..13ad55d83db4b 100644
--- a/llvm/test/Transforms/InstCombine/and-xor-or.ll
+++ b/llvm/test/Transforms/InstCombine/and-xor-or.ll
@@ -1,4 +1,4 @@
-; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
 declare void @use(i32)
@@ -6,9 +6,10 @@ declare void @use(i32)
 ; a & (a ^ b) --> a & ~b
 
 define i32 @and_xor_common_op(i32 %pa, i32 %pb) {
-; CHECK-LABEL: @and_xor_common_op(
-; CHECK-NEXT:    [[A:%.*]] = udiv i32 42, [[PA:%.*]]
-; CHECK-NEXT:    [[B:%.*]] = udiv i32 43, [[PB:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_xor_common_op
+; CHECK-SAME: (i32 [[PA:%.*]], i32 [[PB:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = udiv i32 42, [[PA]]
+; CHECK-NEXT:    [[B:%.*]] = udiv i32 43, [[PB]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
 ; CHECK-NEXT:    [[R:%.*]] = and i32 [[A]], [[TMP1]]
 ; CHECK-NEXT:    ret i32 [[R]]
@@ -23,9 +24,10 @@ define i32 @and_xor_common_op(i32 %pa, i32 %pb) {
 ; a & (b ^ a) --> a & ~b
 
 define i32 @and_xor_common_op_commute1(i32 %pa, i32 %pb) {
-; CHECK-LABEL: @and_xor_common_op_commute1(
-; CHECK-NEXT:    [[A:%.*]] = udiv i32 42, [[PA:%.*]]
-; CHECK-NEXT:    [[B:%.*]] = udiv i32 43, [[PB:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_xor_common_op_commute1
+; CHECK-SAME: (i32 [[PA:%.*]], i32 [[PB:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = udiv i32 42, [[PA]]
+; CHECK-NEXT:    [[B:%.*]] = udiv i32 43, [[PB]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
 ; CHECK-NEXT:    [[R:%.*]] = and i32 [[A]], [[TMP1]]
 ; CHECK-NEXT:    ret i32 [[R]]
@@ -40,9 +42,10 @@ define i32 @and_xor_common_op_commute1(i32 %pa, i32 %pb) {
 ; (b ^ a) & a --> a & ~b
 
 define i32 @and_xor_common_op_commute2(i32 %pa, i32 %pb) {
-; CHECK-LABEL: @and_xor_common_op_commute2(
-; CHECK-NEXT:    [[A:%.*]] = udiv i32 42, [[PA:%.*]]
-; CHECK-NEXT:    [[B:%.*]] = udiv i32 43, [[PB:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_xor_common_op_commute2
+; CHECK-SAME: (i32 [[PA:%.*]], i32 [[PB:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = udiv i32 42, [[PA]]
+; CHECK-NEXT:    [[B:%.*]] = udiv i32 43, [[PB]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
 ; CHECK-NEXT:    [[R:%.*]] = and i32 [[A]], [[TMP1]]
 ; CHECK-NEXT:    ret i32 [[R]]
@@ -57,9 +60,10 @@ define i32 @and_xor_common_op_commute2(i32 %pa, i32 %pb) {
 ; (a ^ b) & a --> a & ~b
 
 define <2 x i32> @and_xor_common_op_commute3(<2 x i32> %pa, <2 x i32> %pb) {
-; CHECK-LABEL: @and_xor_common_op_commute3(
-; CHECK-NEXT:    [[A:%.*]] = udiv <2 x i32> <i32 42, i32 43>, [[PA:%.*]]
-; CHECK-NEXT:    [[B:%.*]] = udiv <2 x i32> <i32 43, i32 42>, [[PB:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_xor_common_op_commute3
+; CHECK-SAME: (<2 x i32> [[PA:%.*]], <2 x i32> [[PB:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = udiv <2 x i32> <i32 42, i32 43>, [[PA]]
+; CHECK-NEXT:    [[B:%.*]] = udiv <2 x i32> <i32 43, i32 42>, [[PB]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = xor <2 x i32> [[B]], <i32 -1, i32 -1>
 ; CHECK-NEXT:    [[R:%.*]] = and <2 x i32> [[A]], [[TMP1]]
 ; CHECK-NEXT:    ret <2 x i32> [[R]]
@@ -75,8 +79,9 @@ define <2 x i32> @and_xor_common_op_commute3(<2 x i32> %pa, <2 x i32> %pb) {
 ; The xor should be a 'not' op (-1 constant).
 
 define <4 x i32> @and_xor_common_op_constant(<4 x i32> %A) {
-; CHECK-LABEL: @and_xor_common_op_constant(
-; CHECK-NEXT:    [[TMP1:%.*]] = xor <4 x i32> [[A:%.*]], <i32 -1, i32 -1, i32 -1, i32 -1>
+; CHECK-LABEL: define {{[^@]+}}@and_xor_common_op_constant
+; CHECK-SAME: (<4 x i32> [[A:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = xor <4 x i32> [[A]], <i32 -1, i32 -1, i32 -1, i32 -1>
 ; CHECK-NEXT:    [[TMP2:%.*]] = and <4 x i32> [[TMP1]], <i32 1, i32 2, i32 3, i32 4>
 ; CHECK-NEXT:    ret <4 x i32> [[TMP2]]
 ;
@@ -88,8 +93,9 @@ define <4 x i32> @and_xor_common_op_constant(<4 x i32> %A) {
 ; a & (a ^ ~b) --> a & b
 
 define i32 @and_xor_not_common_op(i32 %a, i32 %b) {
-; CHECK-LABEL: @and_xor_not_common_op(
-; CHECK-NEXT:    [[T4:%.*]] = and i32 [[A:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_xor_not_common_op
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]]) {
+; CHECK-NEXT:    [[T4:%.*]] = and i32 [[A]], [[B]]
 ; CHECK-NEXT:    ret i32 [[T4]]
 ;
   %b2 = xor i32 %b, -1
@@ -101,10 +107,11 @@ define i32 @and_xor_not_common_op(i32 %a, i32 %b) {
 ; a & (a ^ ~b) --> a & b
 
 define i32 @and_xor_not_common_op_extrause(i32 %a, i32 %b, i32* %dst) {
-; CHECK-LABEL: @and_xor_not_common_op_extrause(
-; CHECK-NEXT:    [[B2:%.*]] = xor i32 [[B:%.*]], -1
-; CHECK-NEXT:    store i32 [[B2]], i32* [[DST:%.*]], align 4
-; CHECK-NEXT:    [[T4:%.*]] = and i32 [[A:%.*]], [[B]]
+; CHECK-LABEL: define {{[^@]+}}@and_xor_not_common_op_extrause
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32* [[DST:%.*]]) {
+; CHECK-NEXT:    [[B2:%.*]] = xor i32 [[B]], -1
+; CHECK-NEXT:    store i32 [[B2]], i32* [[DST]], align 4
+; CHECK-NEXT:    [[T4:%.*]] = and i32 [[A]], [[B]]
 ; CHECK-NEXT:    ret i32 [[T4]]
 ;
   %b2 = xor i32 %b, -1
@@ -117,8 +124,9 @@ define i32 @and_xor_not_common_op_extrause(i32 %a, i32 %b, i32* %dst) {
 ; a & ~(a ^ b) --> a & b
 
 define i32 @and_not_xor_common_op(i32 %a, i32 %b) {
-; CHECK-LABEL: @and_not_xor_common_op(
-; CHECK-NEXT:    [[T4:%.*]] = and i32 [[A:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_xor_common_op
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]]) {
+; CHECK-NEXT:    [[T4:%.*]] = and i32 [[A]], [[B]]
 ; CHECK-NEXT:    ret i32 [[T4]]
 ;
   %b2 = xor i32 %b, %a
@@ -129,9 +137,10 @@ define i32 @and_not_xor_common_op(i32 %a, i32 %b) {
 
 declare i32 @gen32()
 define i32 @and_not_xor_common_op_commutative(i32 %b) {
-; CHECK-LABEL: @and_not_xor_common_op_commutative(
+; CHECK-LABEL: define {{[^@]+}}@and_not_xor_common_op_commutative
+; CHECK-SAME: (i32 [[B:%.*]]) {
 ; CHECK-NEXT:    [[A:%.*]] = call i32 @gen32()
-; CHECK-NEXT:    [[T4:%.*]] = and i32 [[A]], [[B:%.*]]
+; CHECK-NEXT:    [[T4:%.*]] = and i32 [[A]], [[B]]
 ; CHECK-NEXT:    ret i32 [[T4]]
 ;
   %a = call i32 @gen32()
@@ -145,8 +154,9 @@ define i32 @and_not_xor_common_op_commutative(i32 %b) {
 ; (x & y) | (x ^ y) -> x | y
 
 define i64 @or(i64 %x, i64 %y) {
-; CHECK-LABEL: @or(
-; CHECK-NEXT:    [[TMP1:%.*]] = or i64 [[Y:%.*]], [[X:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or
+; CHECK-SAME: (i64 [[X:%.*]], i64 [[Y:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = or i64 [[Y]], [[X]]
 ; CHECK-NEXT:    ret i64 [[TMP1]]
 ;
   %1 = and i64 %y, %x
@@ -158,8 +168,9 @@ define i64 @or(i64 %x, i64 %y) {
 ; (x & y) + (x ^ y) -> x | y
 
 define i64 @or2(i64 %x, i64 %y) {
-; CHECK-LABEL: @or2(
-; CHECK-NEXT:    [[TMP1:%.*]] = or i64 [[Y:%.*]], [[X:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or2
+; CHECK-SAME: (i64 [[X:%.*]], i64 [[Y:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = or i64 [[Y]], [[X]]
 ; CHECK-NEXT:    ret i64 [[TMP1]]
 ;
   %1 = and i64 %y, %x
@@ -171,10 +182,11 @@ define i64 @or2(i64 %x, i64 %y) {
 ; ((x & y) ^ z) | y -> (z | y)
 
 define i64 @and_xor_or1(i64 %px, i64 %py, i64 %pz) {
-; CHECK-LABEL: @and_xor_or1(
-; CHECK-NEXT:    [[Y:%.*]] = udiv i64 42, [[PY:%.*]]
-; CHECK-NEXT:    [[Z:%.*]] = udiv i64 42, [[PZ:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = or i64 [[Z:%.*]], [[Y:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_xor_or1
+; CHECK-SAME: (i64 [[PX:%.*]], i64 [[PY:%.*]], i64 [[PZ:%.*]]) {
+; CHECK-NEXT:    [[Y:%.*]] = udiv i64 42, [[PY]]
+; CHECK-NEXT:    [[Z:%.*]] = udiv i64 42, [[PZ]]
+; CHECK-NEXT:    [[TMP1:%.*]] = or i64 [[Z]], [[Y]]
 ; CHECK-NEXT:    ret i64 [[TMP1]]
 ;
   %x = udiv i64 42, %px ; thwart complexity-based canonicalization
@@ -189,10 +201,11 @@ define i64 @and_xor_or1(i64 %px, i64 %py, i64 %pz) {
 ; ((y & x) ^ z) | y -> (z | y)
 
 define i64 @and_xor_or2(i64 %px, i64 %py, i64 %pz) {
-; CHECK-LABEL: @and_xor_or2(
-; CHECK-NEXT:    [[Y:%.*]] = udiv i64 42, [[PY:%.*]]
-; CHECK-NEXT:    [[Z:%.*]] = udiv i64 42, [[PZ:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = or i64 [[Z:%.*]], [[Y:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_xor_or2
+; CHECK-SAME: (i64 [[PX:%.*]], i64 [[PY:%.*]], i64 [[PZ:%.*]]) {
+; CHECK-NEXT:    [[Y:%.*]] = udiv i64 42, [[PY]]
+; CHECK-NEXT:    [[Z:%.*]] = udiv i64 42, [[PZ]]
+; CHECK-NEXT:    [[TMP1:%.*]] = or i64 [[Z]], [[Y]]
 ; CHECK-NEXT:    ret i64 [[TMP1]]
 ;
   %x = udiv i64 42, %px ; thwart complexity-based canonicalization
@@ -207,10 +220,11 @@ define i64 @and_xor_or2(i64 %px, i64 %py, i64 %pz) {
 ; (z ^ (x & y)) | y -> (z | y)
 
 define i64 @and_xor_or3(i64 %px, i64 %py, i64 %pz) {
-; CHECK-LABEL: @and_xor_or3(
-; CHECK-NEXT:    [[Y:%.*]] = udiv i64 42, [[PY:%.*]]
-; CHECK-NEXT:    [[Z:%.*]] = udiv i64 42, [[PZ:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = or i64 [[Z:%.*]], [[Y:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_xor_or3
+; CHECK-SAME: (i64 [[PX:%.*]], i64 [[PY:%.*]], i64 [[PZ:%.*]]) {
+; CHECK-NEXT:    [[Y:%.*]] = udiv i64 42, [[PY]]
+; CHECK-NEXT:    [[Z:%.*]] = udiv i64 42, [[PZ]]
+; CHECK-NEXT:    [[TMP1:%.*]] = or i64 [[Z]], [[Y]]
 ; CHECK-NEXT:    ret i64 [[TMP1]]
 ;
   %x = udiv i64 42, %px ; thwart complexity-based canonicalization
@@ -225,10 +239,11 @@ define i64 @and_xor_or3(i64 %px, i64 %py, i64 %pz) {
 ; (z ^ (y & x)) | y -> (z | y)
 
 define i64 @and_xor_or4(i64 %px, i64 %py, i64 %pz) {
-; CHECK-LABEL: @and_xor_or4(
-; CHECK-NEXT:    [[Y:%.*]] = udiv i64 42, [[PY:%.*]]
-; CHECK-NEXT:    [[Z:%.*]] = udiv i64 42, [[PZ:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = or i64 [[Z:%.*]], [[Y:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_xor_or4
+; CHECK-SAME: (i64 [[PX:%.*]], i64 [[PY:%.*]], i64 [[PZ:%.*]]) {
+; CHECK-NEXT:    [[Y:%.*]] = udiv i64 42, [[PY]]
+; CHECK-NEXT:    [[Z:%.*]] = udiv i64 42, [[PZ]]
+; CHECK-NEXT:    [[TMP1:%.*]] = or i64 [[Z]], [[Y]]
 ; CHECK-NEXT:    ret i64 [[TMP1]]
 ;
   %x = udiv i64 42, %px ; thwart complexity-based canonicalization
@@ -243,10 +258,11 @@ define i64 @and_xor_or4(i64 %px, i64 %py, i64 %pz) {
 ; y | ((x & y) ^ z) -> (y | z)
 
 define i64 @and_xor_or5(i64 %px, i64 %py, i64 %pz) {
-; CHECK-LABEL: @and_xor_or5(
-; CHECK-NEXT:    [[Y:%.*]] = udiv i64 42, [[PY:%.*]]
-; CHECK-NEXT:    [[Z:%.*]] = udiv i64 42, [[PZ:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = or i64 [[Y:%.*]], [[Z:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_xor_or5
+; CHECK-SAME: (i64 [[PX:%.*]], i64 [[PY:%.*]], i64 [[PZ:%.*]]) {
+; CHECK-NEXT:    [[Y:%.*]] = udiv i64 42, [[PY]]
+; CHECK-NEXT:    [[Z:%.*]] = udiv i64 42, [[PZ]]
+; CHECK-NEXT:    [[TMP1:%.*]] = or i64 [[Y]], [[Z]]
 ; CHECK-NEXT:    ret i64 [[TMP1]]
 ;
   %x = udiv i64 42, %px ; thwart complexity-based canonicalization
@@ -261,10 +277,11 @@ define i64 @and_xor_or5(i64 %px, i64 %py, i64 %pz) {
 ; y | ((y & x) ^ z) -> (y | z)
 
 define i64 @and_xor_or6(i64 %px, i64 %py, i64 %pz) {
-; CHECK-LABEL: @and_xor_or6(
-; CHECK-NEXT:    [[Y:%.*]] = udiv i64 42, [[PY:%.*]]
-; CHECK-NEXT:    [[Z:%.*]] = udiv i64 42, [[PZ:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = or i64 [[Y:%.*]], [[Z:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_xor_or6
+; CHECK-SAME: (i64 [[PX:%.*]], i64 [[PY:%.*]], i64 [[PZ:%.*]]) {
+; CHECK-NEXT:    [[Y:%.*]] = udiv i64 42, [[PY]]
+; CHECK-NEXT:    [[Z:%.*]] = udiv i64 42, [[PZ]]
+; CHECK-NEXT:    [[TMP1:%.*]] = or i64 [[Y]], [[Z]]
 ; CHECK-NEXT:    ret i64 [[TMP1]]
 ;
   %x = udiv i64 42, %px ; thwart complexity-based canonicalization
@@ -279,10 +296,11 @@ define i64 @and_xor_or6(i64 %px, i64 %py, i64 %pz) {
 ; y | (z ^ (x & y)) -> (y | z)
 
 define i64 @and_xor_or7(i64 %px, i64 %py, i64 %pz) {
-; CHECK-LABEL: @and_xor_or7(
-; CHECK-NEXT:    [[Y:%.*]] = udiv i64 42, [[PY:%.*]]
-; CHECK-NEXT:    [[Z:%.*]] = udiv i64 42, [[PZ:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = or i64 [[Y:%.*]], [[Z:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_xor_or7
+; CHECK-SAME: (i64 [[PX:%.*]], i64 [[PY:%.*]], i64 [[PZ:%.*]]) {
+; CHECK-NEXT:    [[Y:%.*]] = udiv i64 42, [[PY]]
+; CHECK-NEXT:    [[Z:%.*]] = udiv i64 42, [[PZ]]
+; CHECK-NEXT:    [[TMP1:%.*]] = or i64 [[Y]], [[Z]]
 ; CHECK-NEXT:    ret i64 [[TMP1]]
 ;
   %x = udiv i64 42, %px ; thwart complexity-based canonicalization
@@ -297,10 +315,11 @@ define i64 @and_xor_or7(i64 %px, i64 %py, i64 %pz) {
 ; y | (z ^ (y & x)) -> (y | z)
 
 define i64 @and_xor_or8(i64 %px, i64 %py, i64 %pz) {
-; CHECK-LABEL: @and_xor_or8(
-; CHECK-NEXT:    [[Y:%.*]] = udiv i64 42, [[PY:%.*]]
-; CHECK-NEXT:    [[Z:%.*]] = udiv i64 42, [[PZ:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = or i64 [[Y:%.*]], [[Z:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_xor_or8
+; CHECK-SAME: (i64 [[PX:%.*]], i64 [[PY:%.*]], i64 [[PZ:%.*]]) {
+; CHECK-NEXT:    [[Y:%.*]] = udiv i64 42, [[PY]]
+; CHECK-NEXT:    [[Z:%.*]] = udiv i64 42, [[PZ]]
+; CHECK-NEXT:    [[TMP1:%.*]] = or i64 [[Y]], [[Z]]
 ; CHECK-NEXT:    ret i64 [[TMP1]]
 ;
   %x = udiv i64 42, %px ; thwart complexity-based canonicalization
@@ -315,10 +334,11 @@ define i64 @and_xor_or8(i64 %px, i64 %py, i64 %pz) {
 ; w | (z ^ (y & x))
 
 define i64 @and_xor_or_negative(i64 %x, i64 %y, i64 %z, i64 %w) {
-; CHECK-LABEL: @and_xor_or_negative(
-; CHECK-NEXT:    [[TMP1:%.*]] = and i64 [[Y:%.*]], [[X:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], [[Z:%.*]]
-; CHECK-NEXT:    [[TMP3:%.*]] = or i64 [[TMP2]], [[Z:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_xor_or_negative
+; CHECK-SAME: (i64 [[X:%.*]], i64 [[Y:%.*]], i64 [[Z:%.*]], i64 [[W:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = and i64 [[Y]], [[X]]
+; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], [[Z]]
+; CHECK-NEXT:    [[TMP3:%.*]] = or i64 [[TMP2]], [[W]]
 ; CHECK-NEXT:    ret i64 [[TMP3]]
 ;
   %1 = and i64 %y, %x
@@ -333,10 +353,11 @@ define i64 @and_xor_or_negative(i64 %x, i64 %y, i64 %z, i64 %w) {
 ; Mix the commutation options to provide coverage using less tests.
 
 define i8 @and_shl(i8 %x, i8 %y, i8 %z, i8 %shamt) {
-; CHECK-LABEL: @and_shl(
-; CHECK-NEXT:    [[SX:%.*]] = shl i8 [[X:%.*]], [[SHAMT:%.*]]
-; CHECK-NEXT:    [[SY:%.*]] = shl i8 [[Y:%.*]], [[SHAMT]]
-; CHECK-NEXT:    [[A:%.*]] = and i8 [[SX]], [[Z:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_shl
+; CHECK-SAME: (i8 [[X:%.*]], i8 [[Y:%.*]], i8 [[Z:%.*]], i8 [[SHAMT:%.*]]) {
+; CHECK-NEXT:    [[SX:%.*]] = shl i8 [[X]], [[SHAMT]]
+; CHECK-NEXT:    [[SY:%.*]] = shl i8 [[Y]], [[SHAMT]]
+; CHECK-NEXT:    [[A:%.*]] = and i8 [[SX]], [[Z]]
 ; CHECK-NEXT:    [[R:%.*]] = and i8 [[SY]], [[A]]
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
@@ -348,10 +369,11 @@ define i8 @and_shl(i8 %x, i8 %y, i8 %z, i8 %shamt) {
 }
 
 define i8 @or_shl(i8 %x, i8 %y, i8 %z, i8 %shamt) {
-; CHECK-LABEL: @or_shl(
-; CHECK-NEXT:    [[SX:%.*]] = shl i8 [[X:%.*]], [[SHAMT:%.*]]
-; CHECK-NEXT:    [[SY:%.*]] = shl i8 [[Y:%.*]], [[SHAMT]]
-; CHECK-NEXT:    [[A:%.*]] = or i8 [[SX]], [[Z:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_shl
+; CHECK-SAME: (i8 [[X:%.*]], i8 [[Y:%.*]], i8 [[Z:%.*]], i8 [[SHAMT:%.*]]) {
+; CHECK-NEXT:    [[SX:%.*]] = shl i8 [[X]], [[SHAMT]]
+; CHECK-NEXT:    [[SY:%.*]] = shl i8 [[Y]], [[SHAMT]]
+; CHECK-NEXT:    [[A:%.*]] = or i8 [[SX]], [[Z]]
 ; CHECK-NEXT:    [[R:%.*]] = or i8 [[A]], [[SY]]
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
@@ -363,10 +385,11 @@ define i8 @or_shl(i8 %x, i8 %y, i8 %z, i8 %shamt) {
 }
 
 define i8 @xor_shl(i8 %x, i8 %y, i8 %zarg, i8 %shamt) {
-; CHECK-LABEL: @xor_shl(
-; CHECK-NEXT:    [[Z:%.*]] = sdiv i8 42, [[ZARG:%.*]]
-; CHECK-NEXT:    [[SX:%.*]] = shl i8 [[X:%.*]], [[SHAMT:%.*]]
-; CHECK-NEXT:    [[SY:%.*]] = shl i8 [[Y:%.*]], [[SHAMT]]
+; CHECK-LABEL: define {{[^@]+}}@xor_shl
+; CHECK-SAME: (i8 [[X:%.*]], i8 [[Y:%.*]], i8 [[ZARG:%.*]], i8 [[SHAMT:%.*]]) {
+; CHECK-NEXT:    [[Z:%.*]] = sdiv i8 42, [[ZARG]]
+; CHECK-NEXT:    [[SX:%.*]] = shl i8 [[X]], [[SHAMT]]
+; CHECK-NEXT:    [[SY:%.*]] = shl i8 [[Y]], [[SHAMT]]
 ; CHECK-NEXT:    [[A:%.*]] = xor i8 [[Z]], [[SX]]
 ; CHECK-NEXT:    [[R:%.*]] = xor i8 [[A]], [[SY]]
 ; CHECK-NEXT:    ret i8 [[R]]
@@ -380,10 +403,11 @@ define i8 @xor_shl(i8 %x, i8 %y, i8 %zarg, i8 %shamt) {
 }
 
 define i8 @and_lshr(i8 %x, i8 %y, i8 %zarg, i8 %shamt) {
-; CHECK-LABEL: @and_lshr(
-; CHECK-NEXT:    [[Z:%.*]] = sdiv i8 42, [[ZARG:%.*]]
-; CHECK-NEXT:    [[SX:%.*]] = lshr i8 [[X:%.*]], [[SHAMT:%.*]]
-; CHECK-NEXT:    [[SY:%.*]] = lshr i8 [[Y:%.*]], [[SHAMT]]
+; CHECK-LABEL: define {{[^@]+}}@and_lshr
+; CHECK-SAME: (i8 [[X:%.*]], i8 [[Y:%.*]], i8 [[ZARG:%.*]], i8 [[SHAMT:%.*]]) {
+; CHECK-NEXT:    [[Z:%.*]] = sdiv i8 42, [[ZARG]]
+; CHECK-NEXT:    [[SX:%.*]] = lshr i8 [[X]], [[SHAMT]]
+; CHECK-NEXT:    [[SY:%.*]] = lshr i8 [[Y]], [[SHAMT]]
 ; CHECK-NEXT:    [[A:%.*]] = and i8 [[Z]], [[SX]]
 ; CHECK-NEXT:    [[R:%.*]] = and i8 [[SY]], [[A]]
 ; CHECK-NEXT:    ret i8 [[R]]
@@ -397,10 +421,11 @@ define i8 @and_lshr(i8 %x, i8 %y, i8 %zarg, i8 %shamt) {
 }
 
 define i8 @or_lshr(i8 %x, i8 %y, i8 %z, i8 %shamt) {
-; CHECK-LABEL: @or_lshr(
-; CHECK-NEXT:    [[SX:%.*]] = lshr i8 [[X:%.*]], [[SHAMT:%.*]]
-; CHECK-NEXT:    [[SY:%.*]] = lshr i8 [[Y:%.*]], [[SHAMT]]
-; CHECK-NEXT:    [[A:%.*]] = or i8 [[SX]], [[Z:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_lshr
+; CHECK-SAME: (i8 [[X:%.*]], i8 [[Y:%.*]], i8 [[Z:%.*]], i8 [[SHAMT:%.*]]) {
+; CHECK-NEXT:    [[SX:%.*]] = lshr i8 [[X]], [[SHAMT]]
+; CHECK-NEXT:    [[SY:%.*]] = lshr i8 [[Y]], [[SHAMT]]
+; CHECK-NEXT:    [[A:%.*]] = or i8 [[SX]], [[Z]]
 ; CHECK-NEXT:    [[R:%.*]] = or i8 [[SY]], [[A]]
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
@@ -412,10 +437,11 @@ define i8 @or_lshr(i8 %x, i8 %y, i8 %z, i8 %shamt) {
 }
 
 define i8 @xor_lshr(i8 %x, i8 %y, i8 %z, i8 %shamt) {
-; CHECK-LABEL: @xor_lshr(
-; CHECK-NEXT:    [[SX:%.*]] = lshr i8 [[X:%.*]], [[SHAMT:%.*]]
-; CHECK-NEXT:    [[SY:%.*]] = lshr i8 [[Y:%.*]], [[SHAMT]]
-; CHECK-NEXT:    [[A:%.*]] = xor i8 [[SX]], [[Z:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@xor_lshr
+; CHECK-SAME: (i8 [[X:%.*]], i8 [[Y:%.*]], i8 [[Z:%.*]], i8 [[SHAMT:%.*]]) {
+; CHECK-NEXT:    [[SX:%.*]] = lshr i8 [[X]], [[SHAMT]]
+; CHECK-NEXT:    [[SY:%.*]] = lshr i8 [[Y]], [[SHAMT]]
+; CHECK-NEXT:    [[A:%.*]] = xor i8 [[SX]], [[Z]]
 ; CHECK-NEXT:    [[R:%.*]] = xor i8 [[A]], [[SY]]
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
@@ -427,10 +453,11 @@ define i8 @xor_lshr(i8 %x, i8 %y, i8 %z, i8 %shamt) {
 }
 
 define i8 @and_ashr(i8 %x, i8 %y, i8 %zarg, i8 %shamt) {
-; CHECK-LABEL: @and_ashr(
-; CHECK-NEXT:    [[Z:%.*]] = sdiv i8 42, [[ZARG:%.*]]
-; CHECK-NEXT:    [[SX:%.*]] = ashr i8 [[X:%.*]], [[SHAMT:%.*]]
-; CHECK-NEXT:    [[SY:%.*]] = ashr i8 [[Y:%.*]], [[SHAMT]]
+; CHECK-LABEL: define {{[^@]+}}@and_ashr
+; CHECK-SAME: (i8 [[X:%.*]], i8 [[Y:%.*]], i8 [[ZARG:%.*]], i8 [[SHAMT:%.*]]) {
+; CHECK-NEXT:    [[Z:%.*]] = sdiv i8 42, [[ZARG]]
+; CHECK-NEXT:    [[SX:%.*]] = ashr i8 [[X]], [[SHAMT]]
+; CHECK-NEXT:    [[SY:%.*]] = ashr i8 [[Y]], [[SHAMT]]
 ; CHECK-NEXT:    [[A:%.*]] = and i8 [[Z]], [[SX]]
 ; CHECK-NEXT:    [[R:%.*]] = and i8 [[A]], [[SY]]
 ; CHECK-NEXT:    ret i8 [[R]]
@@ -444,10 +471,11 @@ define i8 @and_ashr(i8 %x, i8 %y, i8 %zarg, i8 %shamt) {
 }
 
 define i8 @or_ashr(i8 %x, i8 %y, i8 %zarg, i8 %shamt) {
-; CHECK-LABEL: @or_ashr(
-; CHECK-NEXT:    [[Z:%.*]] = sdiv i8 42, [[ZARG:%.*]]
-; CHECK-NEXT:    [[SX:%.*]] = ashr i8 [[X:%.*]], [[SHAMT:%.*]]
-; CHECK-NEXT:    [[SY:%.*]] = ashr i8 [[Y:%.*]], [[SHAMT]]
+; CHECK-LABEL: define {{[^@]+}}@or_ashr
+; CHECK-SAME: (i8 [[X:%.*]], i8 [[Y:%.*]], i8 [[ZARG:%.*]], i8 [[SHAMT:%.*]]) {
+; CHECK-NEXT:    [[Z:%.*]] = sdiv i8 42, [[ZARG]]
+; CHECK-NEXT:    [[SX:%.*]] = ashr i8 [[X]], [[SHAMT]]
+; CHECK-NEXT:    [[SY:%.*]] = ashr i8 [[Y]], [[SHAMT]]
 ; CHECK-NEXT:    [[A:%.*]] = or i8 [[Z]], [[SX]]
 ; CHECK-NEXT:    [[R:%.*]] = or i8 [[SY]], [[A]]
 ; CHECK-NEXT:    ret i8 [[R]]
@@ -461,10 +489,11 @@ define i8 @or_ashr(i8 %x, i8 %y, i8 %zarg, i8 %shamt) {
 }
 
 define <2 x i8> @xor_ashr(<2 x i8> %x, <2 x i8> %y, <2 x i8> %z, <2 x i8> %shamt) {
-; CHECK-LABEL: @xor_ashr(
-; CHECK-NEXT:    [[SX:%.*]] = ashr <2 x i8> [[X:%.*]], [[SHAMT:%.*]]
-; CHECK-NEXT:    [[SY:%.*]] = ashr <2 x i8> [[Y:%.*]], [[SHAMT]]
-; CHECK-NEXT:    [[A:%.*]] = xor <2 x i8> [[SX]], [[Z:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@xor_ashr
+; CHECK-SAME: (<2 x i8> [[X:%.*]], <2 x i8> [[Y:%.*]], <2 x i8> [[Z:%.*]], <2 x i8> [[SHAMT:%.*]]) {
+; CHECK-NEXT:    [[SX:%.*]] = ashr <2 x i8> [[X]], [[SHAMT]]
+; CHECK-NEXT:    [[SY:%.*]] = ashr <2 x i8> [[Y]], [[SHAMT]]
+; CHECK-NEXT:    [[A:%.*]] = xor <2 x i8> [[SX]], [[Z]]
 ; CHECK-NEXT:    [[R:%.*]] = xor <2 x i8> [[A]], [[SY]]
 ; CHECK-NEXT:    ret <2 x i8> [[R]]
 ;
@@ -478,10 +507,11 @@ define <2 x i8> @xor_ashr(<2 x i8> %x, <2 x i8> %y, <2 x i8> %z, <2 x i8> %shamt
 ; Negative test - 
diff erent logic ops
 
 define i8 @or_and_shl(i8 %x, i8 %y, i8 %z, i8 %shamt) {
-; CHECK-LABEL: @or_and_shl(
-; CHECK-NEXT:    [[SX:%.*]] = shl i8 [[X:%.*]], [[SHAMT:%.*]]
-; CHECK-NEXT:    [[SY:%.*]] = shl i8 [[Y:%.*]], [[SHAMT]]
-; CHECK-NEXT:    [[A:%.*]] = or i8 [[SX]], [[Z:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_and_shl
+; CHECK-SAME: (i8 [[X:%.*]], i8 [[Y:%.*]], i8 [[Z:%.*]], i8 [[SHAMT:%.*]]) {
+; CHECK-NEXT:    [[SX:%.*]] = shl i8 [[X]], [[SHAMT]]
+; CHECK-NEXT:    [[SY:%.*]] = shl i8 [[Y]], [[SHAMT]]
+; CHECK-NEXT:    [[A:%.*]] = or i8 [[SX]], [[Z]]
 ; CHECK-NEXT:    [[R:%.*]] = and i8 [[SY]], [[A]]
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
@@ -495,10 +525,11 @@ define i8 @or_and_shl(i8 %x, i8 %y, i8 %z, i8 %shamt) {
 ; Negative test - 
diff erent shift ops
 
 define i8 @or_lshr_shl(i8 %x, i8 %y, i8 %z, i8 %shamt) {
-; CHECK-LABEL: @or_lshr_shl(
-; CHECK-NEXT:    [[SX:%.*]] = lshr i8 [[X:%.*]], [[SHAMT:%.*]]
-; CHECK-NEXT:    [[SY:%.*]] = shl i8 [[Y:%.*]], [[SHAMT]]
-; CHECK-NEXT:    [[A:%.*]] = or i8 [[SX]], [[Z:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_lshr_shl
+; CHECK-SAME: (i8 [[X:%.*]], i8 [[Y:%.*]], i8 [[Z:%.*]], i8 [[SHAMT:%.*]]) {
+; CHECK-NEXT:    [[SX:%.*]] = lshr i8 [[X]], [[SHAMT]]
+; CHECK-NEXT:    [[SY:%.*]] = shl i8 [[Y]], [[SHAMT]]
+; CHECK-NEXT:    [[A:%.*]] = or i8 [[SX]], [[Z]]
 ; CHECK-NEXT:    [[R:%.*]] = or i8 [[A]], [[SY]]
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
@@ -512,10 +543,11 @@ define i8 @or_lshr_shl(i8 %x, i8 %y, i8 %z, i8 %shamt) {
 ; Negative test - 
diff erent shift amounts
 
 define i8 @or_lshr_shamt2(i8 %x, i8 %y, i8 %z, i8 %shamt) {
-; CHECK-LABEL: @or_lshr_shamt2(
-; CHECK-NEXT:    [[SX:%.*]] = lshr i8 [[X:%.*]], 5
-; CHECK-NEXT:    [[SY:%.*]] = lshr i8 [[Y:%.*]], [[SHAMT:%.*]]
-; CHECK-NEXT:    [[A:%.*]] = or i8 [[SX]], [[Z:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_lshr_shamt2
+; CHECK-SAME: (i8 [[X:%.*]], i8 [[Y:%.*]], i8 [[Z:%.*]], i8 [[SHAMT:%.*]]) {
+; CHECK-NEXT:    [[SX:%.*]] = lshr i8 [[X]], 5
+; CHECK-NEXT:    [[SY:%.*]] = lshr i8 [[Y]], [[SHAMT]]
+; CHECK-NEXT:    [[A:%.*]] = or i8 [[SX]], [[Z]]
 ; CHECK-NEXT:    [[R:%.*]] = or i8 [[SY]], [[A]]
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
@@ -529,10 +561,11 @@ define i8 @or_lshr_shamt2(i8 %x, i8 %y, i8 %z, i8 %shamt) {
 ; Negative test - multi-use
 
 define i8 @xor_lshr_multiuse(i8 %x, i8 %y, i8 %z, i8 %shamt) {
-; CHECK-LABEL: @xor_lshr_multiuse(
-; CHECK-NEXT:    [[SX:%.*]] = lshr i8 [[X:%.*]], [[SHAMT:%.*]]
-; CHECK-NEXT:    [[SY:%.*]] = lshr i8 [[Y:%.*]], [[SHAMT]]
-; CHECK-NEXT:    [[A:%.*]] = xor i8 [[SX]], [[Z:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@xor_lshr_multiuse
+; CHECK-SAME: (i8 [[X:%.*]], i8 [[Y:%.*]], i8 [[Z:%.*]], i8 [[SHAMT:%.*]]) {
+; CHECK-NEXT:    [[SX:%.*]] = lshr i8 [[X]], [[SHAMT]]
+; CHECK-NEXT:    [[SY:%.*]] = lshr i8 [[Y]], [[SHAMT]]
+; CHECK-NEXT:    [[A:%.*]] = xor i8 [[SX]], [[Z]]
 ; CHECK-NEXT:    [[R:%.*]] = xor i8 [[A]], [[SY]]
 ; CHECK-NEXT:    [[R2:%.*]] = sdiv i8 [[A]], [[R]]
 ; CHECK-NEXT:    ret i8 [[R2]]
@@ -549,10 +582,11 @@ define i8 @xor_lshr_multiuse(i8 %x, i8 %y, i8 %z, i8 %shamt) {
 ; Check that logical op is performed on a smaller type and then extended.
 
 define i64 @sext_or_chain(i64 %a, i16 %b, i16 %c) {
-; CHECK-LABEL: @sext_or_chain(
-; CHECK-NEXT:    [[CONV:%.*]] = sext i16 [[B:%.*]] to i64
-; CHECK-NEXT:    [[CONV2:%.*]] = sext i16 [[C:%.*]] to i64
-; CHECK-NEXT:    [[OR:%.*]] = or i64 [[CONV]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@sext_or_chain
+; CHECK-SAME: (i64 [[A:%.*]], i16 [[B:%.*]], i16 [[C:%.*]]) {
+; CHECK-NEXT:    [[CONV:%.*]] = sext i16 [[B]] to i64
+; CHECK-NEXT:    [[CONV2:%.*]] = sext i16 [[C]] to i64
+; CHECK-NEXT:    [[OR:%.*]] = or i64 [[CONV]], [[A]]
 ; CHECK-NEXT:    [[OR2:%.*]] = or i64 [[OR]], [[CONV2]]
 ; CHECK-NEXT:    ret i64 [[OR2]]
 ;
@@ -564,10 +598,11 @@ define i64 @sext_or_chain(i64 %a, i16 %b, i16 %c) {
 }
 
 define i64 @zext_or_chain(i64 %a, i16 %b, i16 %c) {
-; CHECK-LABEL: @zext_or_chain(
-; CHECK-NEXT:    [[CONV:%.*]] = zext i16 [[B:%.*]] to i64
-; CHECK-NEXT:    [[CONV2:%.*]] = zext i16 [[C:%.*]] to i64
-; CHECK-NEXT:    [[OR:%.*]] = or i64 [[CONV]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@zext_or_chain
+; CHECK-SAME: (i64 [[A:%.*]], i16 [[B:%.*]], i16 [[C:%.*]]) {
+; CHECK-NEXT:    [[CONV:%.*]] = zext i16 [[B]] to i64
+; CHECK-NEXT:    [[CONV2:%.*]] = zext i16 [[C]] to i64
+; CHECK-NEXT:    [[OR:%.*]] = or i64 [[CONV]], [[A]]
 ; CHECK-NEXT:    [[OR2:%.*]] = or i64 [[OR]], [[CONV2]]
 ; CHECK-NEXT:    ret i64 [[OR2]]
 ;
@@ -579,10 +614,11 @@ define i64 @zext_or_chain(i64 %a, i16 %b, i16 %c) {
 }
 
 define i64 @sext_and_chain(i64 %a, i16 %b, i16 %c) {
-; CHECK-LABEL: @sext_and_chain(
-; CHECK-NEXT:    [[CONV:%.*]] = sext i16 [[B:%.*]] to i64
-; CHECK-NEXT:    [[CONV2:%.*]] = sext i16 [[C:%.*]] to i64
-; CHECK-NEXT:    [[AND:%.*]] = and i64 [[CONV]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@sext_and_chain
+; CHECK-SAME: (i64 [[A:%.*]], i16 [[B:%.*]], i16 [[C:%.*]]) {
+; CHECK-NEXT:    [[CONV:%.*]] = sext i16 [[B]] to i64
+; CHECK-NEXT:    [[CONV2:%.*]] = sext i16 [[C]] to i64
+; CHECK-NEXT:    [[AND:%.*]] = and i64 [[CONV]], [[A]]
 ; CHECK-NEXT:    [[AND2:%.*]] = and i64 [[AND]], [[CONV2]]
 ; CHECK-NEXT:    ret i64 [[AND2]]
 ;
@@ -594,10 +630,11 @@ define i64 @sext_and_chain(i64 %a, i16 %b, i16 %c) {
 }
 
 define i64 @zext_and_chain(i64 %a, i16 %b, i16 %c) {
-; CHECK-LABEL: @zext_and_chain(
-; CHECK-NEXT:    [[CONV:%.*]] = zext i16 [[B:%.*]] to i64
-; CHECK-NEXT:    [[CONV2:%.*]] = zext i16 [[C:%.*]] to i64
-; CHECK-NEXT:    [[AND:%.*]] = and i64 [[CONV]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@zext_and_chain
+; CHECK-SAME: (i64 [[A:%.*]], i16 [[B:%.*]], i16 [[C:%.*]]) {
+; CHECK-NEXT:    [[CONV:%.*]] = zext i16 [[B]] to i64
+; CHECK-NEXT:    [[CONV2:%.*]] = zext i16 [[C]] to i64
+; CHECK-NEXT:    [[AND:%.*]] = and i64 [[CONV]], [[A]]
 ; CHECK-NEXT:    [[AND2:%.*]] = and i64 [[AND]], [[CONV2]]
 ; CHECK-NEXT:    ret i64 [[AND2]]
 ;
@@ -609,10 +646,11 @@ define i64 @zext_and_chain(i64 %a, i16 %b, i16 %c) {
 }
 
 define i64 @sext_xor_chain(i64 %a, i16 %b, i16 %c) {
-; CHECK-LABEL: @sext_xor_chain(
-; CHECK-NEXT:    [[CONV:%.*]] = sext i16 [[B:%.*]] to i64
-; CHECK-NEXT:    [[CONV2:%.*]] = sext i16 [[C:%.*]] to i64
-; CHECK-NEXT:    [[XOR:%.*]] = xor i64 [[CONV]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@sext_xor_chain
+; CHECK-SAME: (i64 [[A:%.*]], i16 [[B:%.*]], i16 [[C:%.*]]) {
+; CHECK-NEXT:    [[CONV:%.*]] = sext i16 [[B]] to i64
+; CHECK-NEXT:    [[CONV2:%.*]] = sext i16 [[C]] to i64
+; CHECK-NEXT:    [[XOR:%.*]] = xor i64 [[CONV]], [[A]]
 ; CHECK-NEXT:    [[XOR2:%.*]] = xor i64 [[XOR]], [[CONV2]]
 ; CHECK-NEXT:    ret i64 [[XOR2]]
 ;
@@ -624,10 +662,11 @@ define i64 @sext_xor_chain(i64 %a, i16 %b, i16 %c) {
 }
 
 define i64 @zext_xor_chain(i64 %a, i16 %b, i16 %c) {
-; CHECK-LABEL: @zext_xor_chain(
-; CHECK-NEXT:    [[CONV:%.*]] = zext i16 [[B:%.*]] to i64
-; CHECK-NEXT:    [[CONV2:%.*]] = zext i16 [[C:%.*]] to i64
-; CHECK-NEXT:    [[XOR:%.*]] = xor i64 [[CONV]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@zext_xor_chain
+; CHECK-SAME: (i64 [[A:%.*]], i16 [[B:%.*]], i16 [[C:%.*]]) {
+; CHECK-NEXT:    [[CONV:%.*]] = zext i16 [[B]] to i64
+; CHECK-NEXT:    [[CONV2:%.*]] = zext i16 [[C]] to i64
+; CHECK-NEXT:    [[XOR:%.*]] = xor i64 [[CONV]], [[A]]
 ; CHECK-NEXT:    [[XOR2:%.*]] = xor i64 [[XOR]], [[CONV2]]
 ; CHECK-NEXT:    ret i64 [[XOR2]]
 ;
@@ -640,12 +679,13 @@ define i64 @zext_xor_chain(i64 %a, i16 %b, i16 %c) {
 
 ; Negative test with more uses.
 define i64 @sext_or_chain_two_uses1(i64 %a, i16 %b, i16 %c, i64 %d) {
-; CHECK-LABEL: @sext_or_chain_two_uses1(
-; CHECK-NEXT:    [[CONV:%.*]] = sext i16 [[B:%.*]] to i64
-; CHECK-NEXT:    [[CONV2:%.*]] = sext i16 [[C:%.*]] to i64
-; CHECK-NEXT:    [[OR:%.*]] = or i64 [[CONV]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@sext_or_chain_two_uses1
+; CHECK-SAME: (i64 [[A:%.*]], i16 [[B:%.*]], i16 [[C:%.*]], i64 [[D:%.*]]) {
+; CHECK-NEXT:    [[CONV:%.*]] = sext i16 [[B]] to i64
+; CHECK-NEXT:    [[CONV2:%.*]] = sext i16 [[C]] to i64
+; CHECK-NEXT:    [[OR:%.*]] = or i64 [[CONV]], [[A]]
 ; CHECK-NEXT:    [[OR2:%.*]] = or i64 [[OR]], [[CONV2]]
-; CHECK-NEXT:    [[USE:%.*]] = udiv i64 [[OR]], [[D:%.*]]
+; CHECK-NEXT:    [[USE:%.*]] = udiv i64 [[OR]], [[D]]
 ; CHECK-NEXT:    [[RETVAL:%.*]] = udiv i64 [[OR2]], [[USE]]
 ; CHECK-NEXT:    ret i64 [[RETVAL]]
 ;
@@ -659,12 +699,13 @@ define i64 @sext_or_chain_two_uses1(i64 %a, i16 %b, i16 %c, i64 %d) {
   ret i64 %retval
 }
 define i64 @sext_or_chain_two_uses2(i64 %a, i16 %b, i16 %c, i64 %d) {
-; CHECK-LABEL: @sext_or_chain_two_uses2(
-; CHECK-NEXT:    [[CONV:%.*]] = sext i16 [[B:%.*]] to i64
-; CHECK-NEXT:    [[CONV2:%.*]] = sext i16 [[C:%.*]] to i64
-; CHECK-NEXT:    [[OR:%.*]] = or i64 [[CONV]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@sext_or_chain_two_uses2
+; CHECK-SAME: (i64 [[A:%.*]], i16 [[B:%.*]], i16 [[C:%.*]], i64 [[D:%.*]]) {
+; CHECK-NEXT:    [[CONV:%.*]] = sext i16 [[B]] to i64
+; CHECK-NEXT:    [[CONV2:%.*]] = sext i16 [[C]] to i64
+; CHECK-NEXT:    [[OR:%.*]] = or i64 [[CONV]], [[A]]
 ; CHECK-NEXT:    [[OR2:%.*]] = or i64 [[OR]], [[CONV2]]
-; CHECK-NEXT:    [[USE1:%.*]] = udiv i64 [[OR2]], [[D:%.*]]
+; CHECK-NEXT:    [[USE1:%.*]] = udiv i64 [[OR2]], [[D]]
 ; CHECK-NEXT:    [[USE2:%.*]] = udiv i64 [[OR2]], [[USE1]]
 ; CHECK-NEXT:    ret i64 [[USE2]]
 ;
@@ -681,9 +722,10 @@ define i64 @sext_or_chain_two_uses2(i64 %a, i16 %b, i16 %c, i64 %d) {
 ; (a & ~b) & ~c --> a & ~(b | c)
 
 define i32 @not_and_and_not(i32 %a0, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_not(
-; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_not
+; CHECK-SAME: (i32 [[A0:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[TMP1]], -1
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A]], [[TMP2]]
 ; CHECK-NEXT:    ret i32 [[AND2]]
@@ -697,9 +739,10 @@ define i32 @not_and_and_not(i32 %a0, i32 %b, i32 %c) {
 }
 
 define <4 x i64> @not_and_and_not_4i64(<4 x i64> %a0, <4 x i64> %b, <4 x i64> %c) {
-; CHECK-LABEL: @not_and_and_not_4i64(
-; CHECK-NEXT:    [[A:%.*]] = sdiv <4 x i64> <i64 42, i64 42, i64 42, i64 42>, [[A0:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = or <4 x i64> [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_not_4i64
+; CHECK-SAME: (<4 x i64> [[A0:%.*]], <4 x i64> [[B:%.*]], <4 x i64> [[C:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = sdiv <4 x i64> <i64 42, i64 42, i64 42, i64 42>, [[A0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = or <4 x i64> [[B]], [[C]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = xor <4 x i64> [[TMP1]], <i64 -1, i64 -1, i64 -1, i64 -1>
 ; CHECK-NEXT:    [[AND2:%.*]] = and <4 x i64> [[A]], [[TMP2]]
 ; CHECK-NEXT:    ret <4 x i64> [[AND2]]
@@ -715,10 +758,11 @@ define <4 x i64> @not_and_and_not_4i64(<4 x i64> %a0, <4 x i64> %b, <4 x i64> %c
 ; (~b & a) & ~c --> a & ~(b | c)
 
 define i32 @not_and_and_not_commute1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_not_commute1(
-; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_not_commute1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[TMP1]], -1
-; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[TMP2]], [[A:%.*]]
+; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[TMP2]], [[A]]
 ; CHECK-NEXT:    ret i32 [[AND2]]
 ;
   %not1 = xor i32 %b, -1
@@ -731,10 +775,11 @@ define i32 @not_and_and_not_commute1(i32 %a, i32 %b, i32 %c) {
 ; ~c & (a & ~b) --> a & ~(b | c)
 
 define i32 @not_and_and_not_commute2_extra_not_use(i32 %a0, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_not_commute2_extra_not_use(
-; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0:%.*]]
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[C:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[B:%.*]], [[C]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_not_commute2_extra_not_use
+; CHECK-SAME: (i32 [[A0:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0]]
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[C]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[TMP1]], -1
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A]], [[TMP2]]
 ; CHECK-NEXT:    call void @use(i32 [[NOT2]])
@@ -750,10 +795,11 @@ define i32 @not_and_and_not_commute2_extra_not_use(i32 %a0, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_not_extra_and1_use(i32 %a0, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_not_extra_and1_use(
-; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0:%.*]]
-; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[B:%.*]], -1
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[C:%.*]], -1
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_not_extra_and1_use
+; CHECK-SAME: (i32 [[A0:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0]]
+; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[B]], -1
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[C]], -1
 ; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[A]], [[NOT1]]
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[AND1]], [[NOT2]]
 ; CHECK-NEXT:    call void @use(i32 [[AND1]])
@@ -771,9 +817,10 @@ define i32 @not_and_and_not_extra_and1_use(i32 %a0, i32 %b, i32 %c) {
 ; (a | ~b) | ~c --> a | ~(b & c)
 
 define i32 @not_or_or_not(i32 %a0, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_not(
-; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_not
+; CHECK-SAME: (i32 [[A0:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[TMP1]], -1
 ; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A]], [[TMP2]]
 ; CHECK-NEXT:    ret i32 [[OR2]]
@@ -787,9 +834,10 @@ define i32 @not_or_or_not(i32 %a0, i32 %b, i32 %c) {
 }
 
 define <2 x i6> @not_or_or_not_2i6(<2 x i6> %a0, <2 x i6> %b, <2 x i6> %c) {
-; CHECK-LABEL: @not_or_or_not_2i6(
-; CHECK-NEXT:    [[A:%.*]] = sdiv <2 x i6> <i6 3, i6 3>, [[A0:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = and <2 x i6> [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_not_2i6
+; CHECK-SAME: (<2 x i6> [[A0:%.*]], <2 x i6> [[B:%.*]], <2 x i6> [[C:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = sdiv <2 x i6> <i6 3, i6 3>, [[A0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = and <2 x i6> [[B]], [[C]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = xor <2 x i6> [[TMP1]], <i6 -1, i6 -1>
 ; CHECK-NEXT:    [[OR2:%.*]] = or <2 x i6> [[A]], [[TMP2]]
 ; CHECK-NEXT:    ret <2 x i6> [[OR2]]
@@ -805,10 +853,11 @@ define <2 x i6> @not_or_or_not_2i6(<2 x i6> %a0, <2 x i6> %b, <2 x i6> %c) {
 ; (~b | a) | ~c --> a | ~(b & c)
 
 define i32 @not_or_or_not_commute1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_not_commute1(
-; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_not_commute1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[TMP1]], -1
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[TMP2]], [[A:%.*]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[TMP2]], [[A]]
 ; CHECK-NEXT:    ret i32 [[OR2]]
 ;
   %not1 = xor i32 %b, -1
@@ -821,10 +870,11 @@ define i32 @not_or_or_not_commute1(i32 %a, i32 %b, i32 %c) {
 ; ~c | (a | ~b) --> a | ~(b & c)
 
 define i32 @not_or_or_not_commute2_extra_not_use(i32 %a0, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_not_commute2_extra_not_use(
-; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0:%.*]]
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[C:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[B:%.*]], [[C]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_not_commute2_extra_not_use
+; CHECK-SAME: (i32 [[A0:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0]]
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[C]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[TMP1]], -1
 ; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A]], [[TMP2]]
 ; CHECK-NEXT:    call void @use(i32 [[NOT2]])
@@ -840,10 +890,11 @@ define i32 @not_or_or_not_commute2_extra_not_use(i32 %a0, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_not_extra_or1_use(i32 %a0, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_not_extra_or1_use(
-; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0:%.*]]
-; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[B:%.*]], -1
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[C:%.*]], -1
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_not_extra_or1_use
+; CHECK-SAME: (i32 [[A0:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0]]
+; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[B]], -1
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[C]], -1
 ; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[A]], [[NOT1]]
 ; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[OR1]], [[NOT2]]
 ; CHECK-NEXT:    call void @use(i32 [[OR1]])
@@ -861,9 +912,10 @@ define i32 @not_or_or_not_extra_or1_use(i32 %a0, i32 %b, i32 %c) {
 ; (c & ~(a | b)) | (b & ~(a | c)) --> ~a & (b ^ c)
 
 define i32 @or_not_and(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and(
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[A:%.*]], -1
+; CHECK-LABEL: define {{[^@]+}}@or_not_and
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
+; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[OR3:%.*]] = and i32 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -878,10 +930,11 @@ define i32 @or_not_and(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_not_and_commute1(i32 %a, i32 %b0, i32 %c) {
-; CHECK-LABEL: @or_not_and_commute1(
-; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[A:%.*]], -1
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_commute1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B0:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
+; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[OR3:%.*]] = and i32 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -897,10 +950,11 @@ define i32 @or_not_and_commute1(i32 %a, i32 %b0, i32 %c) {
 }
 
 define i32 @or_not_and_commute2(i32 %a, i32 %b0, i32 %c) {
-; CHECK-LABEL: @or_not_and_commute2(
-; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[A:%.*]], -1
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_commute2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B0:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
+; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[OR3:%.*]] = and i32 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -916,9 +970,10 @@ define i32 @or_not_and_commute2(i32 %a, i32 %b0, i32 %c) {
 }
 
 define i32 @or_not_and_commute3(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and_commute3(
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[A:%.*]], -1
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_commute3
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
+; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[OR3:%.*]] = and i32 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -933,10 +988,11 @@ define i32 @or_not_and_commute3(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_not_and_commute4(i32 %a, i32 %b, i32 %c0) {
-; CHECK-LABEL: @or_not_and_commute4(
-; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[A:%.*]], -1
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_commute4
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C0:%.*]]) {
+; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
+; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[OR3:%.*]] = and i32 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -952,10 +1008,11 @@ define i32 @or_not_and_commute4(i32 %a, i32 %b, i32 %c0) {
 }
 
 define i32 @or_not_and_commute5(i32 %a0, i32 %b, i32 %c0) {
-; CHECK-LABEL: @or_not_and_commute5(
-; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0:%.*]]
-; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_commute5
+; CHECK-SAME: (i32 [[A0:%.*]], i32 [[B:%.*]], i32 [[C0:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0]]
+; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[OR3:%.*]] = and i32 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret i32 [[OR3]]
@@ -973,9 +1030,10 @@ define i32 @or_not_and_commute5(i32 %a0, i32 %b, i32 %c0) {
 }
 
 define i32 @or_not_and_commute6(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and_commute6(
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[A:%.*]], -1
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_commute6
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
+; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[OR3:%.*]] = and i32 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -990,9 +1048,10 @@ define i32 @or_not_and_commute6(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_not_and_commute7(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and_commute7(
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[A:%.*]], -1
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_commute7
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
+; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[OR3:%.*]] = and i32 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -1007,10 +1066,11 @@ define i32 @or_not_and_commute7(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_not_and_commute8(i32 %a0, i32 %b0, i32 %c) {
-; CHECK-LABEL: @or_not_and_commute8(
-; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0:%.*]]
-; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_commute8
+; CHECK-SAME: (i32 [[A0:%.*]], i32 [[B0:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0]]
+; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[OR3:%.*]] = and i32 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret i32 [[OR3]]
@@ -1028,10 +1088,11 @@ define i32 @or_not_and_commute8(i32 %a0, i32 %b0, i32 %c) {
 }
 
 define i32 @or_not_and_commute9(i32 %a0, i32 %b0, i32 %c0) {
-; CHECK-LABEL: @or_not_and_commute9(
-; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0:%.*]]
-; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0:%.*]]
-; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_commute9
+; CHECK-SAME: (i32 [[A0:%.*]], i32 [[B0:%.*]], i32 [[C0:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0]]
+; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0]]
+; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[OR3:%.*]] = and i32 [[TMP1]], [[TMP2]]
@@ -1051,10 +1112,11 @@ define i32 @or_not_and_commute9(i32 %a0, i32 %b0, i32 %c0) {
 }
 
 define i32 @or_not_and_extra_not_use1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and_extra_not_use1(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[A:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_extra_not_use1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[A]], [[B]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[OR1]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C:%.*]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[OR3:%.*]] = and i32 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    call void @use(i32 [[NOT1]])
@@ -1072,10 +1134,11 @@ define i32 @or_not_and_extra_not_use1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_not_and_extra_not_use2(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and_extra_not_use2(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[A:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_extra_not_use2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[A]], [[B]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[OR1]], -1
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT1]], [[C:%.*]]
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT1]], [[C]]
 ; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[OR2]], -1
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[NOT2]], [[B]]
@@ -1095,10 +1158,11 @@ define i32 @or_not_and_extra_not_use2(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_not_and_extra_and_use1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and_extra_and_use1(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[A:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_extra_and_use1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[A]], [[B]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[OR1]], -1
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT1]], [[C:%.*]]
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT1]], [[C]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[OR3:%.*]] = and i32 [[TMP1]], [[TMP2]]
@@ -1117,10 +1181,11 @@ define i32 @or_not_and_extra_and_use1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_not_and_extra_and_use2(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and_extra_and_use2(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[A:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_extra_and_use2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[A]], [[B]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[OR1]], -1
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT1]], [[C:%.*]]
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT1]], [[C]]
 ; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[OR2]], -1
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[NOT2]], [[B]]
@@ -1140,9 +1205,10 @@ define i32 @or_not_and_extra_and_use2(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_not_and_extra_or_use1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and_extra_or_use1(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[A:%.*]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_extra_or_use1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[A]], [[B]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[OR3:%.*]] = and i32 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    call void @use(i32 [[OR1]])
@@ -1160,9 +1226,10 @@ define i32 @or_not_and_extra_or_use1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_not_and_extra_or_use2(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and_extra_or_use2(
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A:%.*]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], [[C]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_extra_or_use2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A]], [[C]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[OR3:%.*]] = and i32 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    call void @use(i32 [[OR2]])
@@ -1180,11 +1247,12 @@ define i32 @or_not_and_extra_or_use2(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_not_and_wrong_c(i32 %a, i32 %b, i32 %c, i32 %d) {
-; CHECK-LABEL: @or_not_and_wrong_c(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[A:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_wrong_c
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]], i32 [[D:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[A]], [[B]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[OR1]], -1
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT1]], [[C:%.*]]
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A]], [[D:%.*]]
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT1]], [[C]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A]], [[D]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[OR2]], -1
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[NOT2]], [[B]]
 ; CHECK-NEXT:    [[OR3:%.*]] = or i32 [[AND1]], [[AND2]]
@@ -1201,13 +1269,14 @@ define i32 @or_not_and_wrong_c(i32 %a, i32 %b, i32 %c, i32 %d) {
 }
 
 define i32 @or_not_and_wrong_b(i32 %a, i32 %b, i32 %c, i32 %d) {
-; CHECK-LABEL: @or_not_and_wrong_b(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[A:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_wrong_b
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]], i32 [[D:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[A]], [[B]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[OR1]], -1
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT1]], [[C:%.*]]
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT1]], [[C]]
 ; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[OR2]], -1
-; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[NOT2]], [[D:%.*]]
+; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[NOT2]], [[D]]
 ; CHECK-NEXT:    [[OR3:%.*]] = or i32 [[AND1]], [[AND2]]
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -1224,9 +1293,10 @@ define i32 @or_not_and_wrong_b(i32 %a, i32 %b, i32 %c, i32 %d) {
 ; (c | ~(a & b)) & (b | ~(a & c)) --> ~(a & (b ^ c))
 
 define i32 @and_not_or(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or(
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -1241,10 +1311,11 @@ define i32 @and_not_or(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_not_or_commute1(i32 %a, i32 %b0, i32 %c) {
-; CHECK-LABEL: @and_not_or_commute1(
-; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_commute1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B0:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -1260,10 +1331,11 @@ define i32 @and_not_or_commute1(i32 %a, i32 %b0, i32 %c) {
 }
 
 define i32 @and_not_or_commute2(i32 %a, i32 %b0, i32 %c) {
-; CHECK-LABEL: @and_not_or_commute2(
-; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_commute2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B0:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -1279,9 +1351,10 @@ define i32 @and_not_or_commute2(i32 %a, i32 %b0, i32 %c) {
 }
 
 define i32 @and_not_or_commute3(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or_commute3(
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_commute3
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -1296,10 +1369,11 @@ define i32 @and_not_or_commute3(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_not_or_commute4(i32 %a, i32 %b, i32 %c0) {
-; CHECK-LABEL: @and_not_or_commute4(
-; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_commute4
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C0:%.*]]) {
+; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -1315,10 +1389,11 @@ define i32 @and_not_or_commute4(i32 %a, i32 %b, i32 %c0) {
 }
 
 define i32 @and_not_or_commute5(i32 %a0, i32 %b, i32 %c0) {
-; CHECK-LABEL: @and_not_or_commute5(
-; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0:%.*]]
-; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_commute5
+; CHECK-SAME: (i32 [[A0:%.*]], i32 [[B:%.*]], i32 [[C0:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0]]
+; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[AND3]]
@@ -1336,9 +1411,10 @@ define i32 @and_not_or_commute5(i32 %a0, i32 %b, i32 %c0) {
 }
 
 define i32 @and_not_or_commute6(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or_commute6(
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_commute6
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -1353,9 +1429,10 @@ define i32 @and_not_or_commute6(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_not_or_commute7(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or_commute7(
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_commute7
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -1370,10 +1447,11 @@ define i32 @and_not_or_commute7(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_not_or_commute8(i32 %a0, i32 %b0, i32 %c) {
-; CHECK-LABEL: @and_not_or_commute8(
-; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0:%.*]]
-; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_commute8
+; CHECK-SAME: (i32 [[A0:%.*]], i32 [[B0:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0]]
+; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[AND3]]
@@ -1391,10 +1469,11 @@ define i32 @and_not_or_commute8(i32 %a0, i32 %b0, i32 %c) {
 }
 
 define i32 @and_not_or_commute9(i32 %a0, i32 %b0, i32 %c0) {
-; CHECK-LABEL: @and_not_or_commute9(
-; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0:%.*]]
-; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0:%.*]]
-; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_commute9
+; CHECK-SAME: (i32 [[A0:%.*]], i32 [[B0:%.*]], i32 [[C0:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0]]
+; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0]]
+; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
@@ -1414,10 +1493,11 @@ define i32 @and_not_or_commute9(i32 %a0, i32 %b0, i32 %c0) {
 }
 
 define i32 @and_not_or_extra_not_use1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or_extra_not_use1(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[A:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_extra_not_use1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[A]], [[B]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C:%.*]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    call void @use(i32 [[NOT1]])
@@ -1435,10 +1515,11 @@ define i32 @and_not_or_extra_not_use1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_not_or_extra_not_use2(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or_extra_not_use2(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[A:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_extra_not_use2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[A]], [[B]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[C:%.*]]
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[AND2]], -1
 ; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[NOT2]], [[B]]
@@ -1458,10 +1539,11 @@ define i32 @and_not_or_extra_not_use2(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_not_or_extra_and_use1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or_extra_and_use1(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[A:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_extra_and_use1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[A]], [[B]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[C:%.*]]
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[C]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
@@ -1480,10 +1562,11 @@ define i32 @and_not_or_extra_and_use1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_not_or_extra_and_use2(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or_extra_and_use2(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[A:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_extra_and_use2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[A]], [[B]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[C:%.*]]
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[AND2]], -1
 ; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[NOT2]], [[B]]
@@ -1503,9 +1586,10 @@ define i32 @and_not_or_extra_and_use2(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_not_or_extra_or_use1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or_extra_or_use1(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[A:%.*]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_extra_or_use1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[A]], [[B]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    call void @use(i32 [[AND1]])
@@ -1523,9 +1607,10 @@ define i32 @and_not_or_extra_or_use1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_not_or_extra_or_use2(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or_extra_or_use2(
-; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A:%.*]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], [[C]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_extra_or_use2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A]], [[C]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    call void @use(i32 [[AND2]])
@@ -1543,11 +1628,12 @@ define i32 @and_not_or_extra_or_use2(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_not_or_wrong_c(i32 %a, i32 %b, i32 %c, i32 %d) {
-; CHECK-LABEL: @and_not_or_wrong_c(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[A:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_wrong_c
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]], i32 [[D:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[A]], [[B]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[C:%.*]]
-; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A]], [[D:%.*]]
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[C]]
+; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A]], [[D]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[AND2]], -1
 ; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[NOT2]], [[B]]
 ; CHECK-NEXT:    [[AND3:%.*]] = and i32 [[OR1]], [[OR2]]
@@ -1564,13 +1650,14 @@ define i32 @and_not_or_wrong_c(i32 %a, i32 %b, i32 %c, i32 %d) {
 }
 
 define i32 @and_not_or_wrong_b(i32 %a, i32 %b, i32 %c, i32 %d) {
-; CHECK-LABEL: @and_not_or_wrong_b(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[A:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_wrong_b
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]], i32 [[D:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[A]], [[B]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[C:%.*]]
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[AND2]], -1
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[NOT2]], [[D:%.*]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[NOT2]], [[D]]
 ; CHECK-NEXT:    [[AND3:%.*]] = and i32 [[OR1]], [[OR2]]
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -1587,9 +1674,10 @@ define i32 @and_not_or_wrong_b(i32 %a, i32 %b, i32 %c, i32 %d) {
 ; (b & ~(a | c)) | ~(a | b) --> ~((b & c) | a)
 
 define i32 @or_and_not_not(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_and_not_not(
-; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[C:%.*]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_and_not_not
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[C]], [[B]]
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -1603,10 +1691,11 @@ define i32 @or_and_not_not(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_and_not_not_commute1(i32 %a, i32 %b0, i32 %c) {
-; CHECK-LABEL: @or_and_not_not_commute1(
-; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[B]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_and_not_not_commute1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B0:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[B]], [[C]]
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -1621,9 +1710,10 @@ define i32 @or_and_not_not_commute1(i32 %a, i32 %b0, i32 %c) {
 }
 
 define i32 @or_and_not_not_commute2(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_and_not_not_commute2(
-; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[C:%.*]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_and_not_not_commute2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[C]], [[B]]
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -1637,9 +1727,10 @@ define i32 @or_and_not_not_commute2(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_and_not_not_commute3(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_and_not_not_commute3(
-; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[C:%.*]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_and_not_not_commute3
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[C]], [[B]]
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -1653,9 +1744,10 @@ define i32 @or_and_not_not_commute3(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_and_not_not_commute4(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_and_not_not_commute4(
-; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[C:%.*]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_and_not_not_commute4
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[C]], [[B]]
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -1669,9 +1761,10 @@ define i32 @or_and_not_not_commute4(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_and_not_not_commute5(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_and_not_not_commute5(
-; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[C:%.*]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_and_not_not_commute5
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[C]], [[B]]
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -1685,10 +1778,11 @@ define i32 @or_and_not_not_commute5(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_and_not_not_commute6(i32 %a, i32 %b0, i32 %c) {
-; CHECK-LABEL: @or_and_not_not_commute6(
-; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[B]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_and_not_not_commute6
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B0:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[B]], [[C]]
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -1703,9 +1797,10 @@ define i32 @or_and_not_not_commute6(i32 %a, i32 %b0, i32 %c) {
 }
 
 define i32 @or_and_not_not_commute7(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_and_not_not_commute7(
-; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[C:%.*]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_and_not_not_commute7
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[C]], [[B]]
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -1719,10 +1814,11 @@ define i32 @or_and_not_not_commute7(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_and_not_not_extra_not_use1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_and_not_not_extra_not_use1(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_and_not_not_extra_not_use1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[A]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[OR1]], -1
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A]], [[C:%.*]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[OR2]], -1
 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[NOT2]], [[B]]
 ; CHECK-NEXT:    [[OR3:%.*]] = or i32 [[AND]], [[NOT1]]
@@ -1740,10 +1836,11 @@ define i32 @or_and_not_not_extra_not_use1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_and_not_not_extra_not_use2(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_and_not_not_extra_not_use2(
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_and_not_not_extra_not_use2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[OR2]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[C]], [[B:%.*]]
+; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    call void @use(i32 [[NOT2]])
@@ -1760,10 +1857,11 @@ define i32 @or_and_not_not_extra_not_use2(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_and_not_not_extra_and_use(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_and_not_not_extra_and_use(
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_and_not_not_extra_and_use
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[OR2]], -1
-; CHECK-NEXT:    [[AND:%.*]] = and i32 [[NOT2]], [[B:%.*]]
+; CHECK-NEXT:    [[AND:%.*]] = and i32 [[NOT2]], [[B]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
@@ -1781,10 +1879,11 @@ define i32 @or_and_not_not_extra_and_use(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_and_not_not_extra_or_use1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_and_not_not_extra_or_use1(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_and_not_not_extra_or_use1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[A]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[OR1]], -1
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A]], [[C:%.*]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[OR2]], -1
 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[NOT2]], [[B]]
 ; CHECK-NEXT:    [[OR3:%.*]] = or i32 [[AND]], [[NOT1]]
@@ -1802,9 +1901,10 @@ define i32 @or_and_not_not_extra_or_use1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_and_not_not_extra_or_use2(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_and_not_not_extra_or_use2(
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A:%.*]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[C]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_and_not_not_extra_or_use2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A]], [[C]]
+; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    call void @use(i32 [[OR2]])
@@ -1823,11 +1923,12 @@ define i32 @or_and_not_not_extra_or_use2(i32 %a, i32 %b, i32 %c) {
 ; Check the use limit. It can be adjusted in the future in terms of
 ; LHS and RHS uses distribution to be more flexible.
 define i32 @or_and_not_not_2_extra_uses(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_and_not_not_2_extra_uses(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_and_not_not_2_extra_uses
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[A]]
 ; CHECK-NEXT:    call void @use(i32 [[OR1]])
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[OR1]], -1
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A]], [[C:%.*]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[OR2]], -1
 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[NOT2]], [[B]]
 ; CHECK-NEXT:    call void @use(i32 [[AND]])
@@ -1846,10 +1947,11 @@ define i32 @or_and_not_not_2_extra_uses(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_and_not_not_wrong_a(i32 %a, i32 %b, i32 %c, i32 %d) {
-; CHECK-LABEL: @or_and_not_not_wrong_a(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[D:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_and_not_not_wrong_a
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]], i32 [[D:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[D]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[OR1]], -1
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A:%.*]], [[C:%.*]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[OR2]], -1
 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[NOT2]], [[B]]
 ; CHECK-NEXT:    [[OR3:%.*]] = or i32 [[AND]], [[NOT1]]
@@ -1865,12 +1967,13 @@ define i32 @or_and_not_not_wrong_a(i32 %a, i32 %b, i32 %c, i32 %d) {
 }
 
 define i32 @or_and_not_not_wrong_b(i32 %a, i32 %b, i32 %c, i32 %d) {
-; CHECK-LABEL: @or_and_not_not_wrong_b(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[D:%.*]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_and_not_not_wrong_b
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]], i32 [[D:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[D]], [[A]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[OR1]], -1
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A]], [[C:%.*]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[OR2]], -1
-; CHECK-NEXT:    [[AND:%.*]] = and i32 [[NOT2]], [[B:%.*]]
+; CHECK-NEXT:    [[AND:%.*]] = and i32 [[NOT2]], [[B]]
 ; CHECK-NEXT:    [[OR3:%.*]] = or i32 [[AND]], [[NOT1]]
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -1886,9 +1989,10 @@ define i32 @or_and_not_not_wrong_b(i32 %a, i32 %b, i32 %c, i32 %d) {
 ; (b | ~(a & c)) & ~(a & b) --> ~((b | c) & a)
 
 define i32 @and_or_not_not(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_or_not_not(
-; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[C:%.*]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_or_not_not
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[C]], [[B]]
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -1902,10 +2006,11 @@ define i32 @and_or_not_not(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_or_not_not_commute1(i32 %a, i32 %b0, i32 %c) {
-; CHECK-LABEL: @and_or_not_not_commute1(
-; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[B]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_or_not_not_commute1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B0:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[B]], [[C]]
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -1920,9 +2025,10 @@ define i32 @and_or_not_not_commute1(i32 %a, i32 %b0, i32 %c) {
 }
 
 define i32 @and_or_not_not_commute2(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_or_not_not_commute2(
-; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[C:%.*]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_or_not_not_commute2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[C]], [[B]]
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -1936,9 +2042,10 @@ define i32 @and_or_not_not_commute2(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_or_not_not_commute3(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_or_not_not_commute3(
-; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[C:%.*]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_or_not_not_commute3
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[C]], [[B]]
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -1952,9 +2059,10 @@ define i32 @and_or_not_not_commute3(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_or_not_not_commute4(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_or_not_not_commute4(
-; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[C:%.*]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_or_not_not_commute4
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[C]], [[B]]
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -1968,9 +2076,10 @@ define i32 @and_or_not_not_commute4(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_or_not_not_commute5(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_or_not_not_commute5(
-; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[C:%.*]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_or_not_not_commute5
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[C]], [[B]]
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -1984,10 +2093,11 @@ define i32 @and_or_not_not_commute5(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_or_not_not_commute6(i32 %a, i32 %b0, i32 %c) {
-; CHECK-LABEL: @and_or_not_not_commute6(
-; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[B]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_or_not_not_commute6
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B0:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[B]], [[C]]
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -2002,9 +2112,10 @@ define i32 @and_or_not_not_commute6(i32 %a, i32 %b0, i32 %c) {
 }
 
 define i32 @and_or_not_not_commute7(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_or_not_not_commute7(
-; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[C:%.*]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_or_not_not_commute7
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[C]], [[B]]
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -2018,10 +2129,11 @@ define i32 @and_or_not_not_commute7(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_or_not_not_extra_not_use1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_or_not_not_extra_not_use1(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_or_not_not_extra_not_use1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[A]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
-; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A]], [[C:%.*]]
+; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[AND2]], -1
 ; CHECK-NEXT:    [[OR:%.*]] = or i32 [[NOT2]], [[B]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[AND1]], [[OR]]
@@ -2039,10 +2151,11 @@ define i32 @and_or_not_not_extra_not_use1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_or_not_not_extra_not_use2(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_or_not_not_extra_not_use2(
-; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_or_not_not_extra_not_use2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[AND2]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[C]], [[B:%.*]]
+; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    call void @use(i32 [[NOT2]])
@@ -2059,10 +2172,11 @@ define i32 @and_or_not_not_extra_not_use2(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_or_not_not_extra_and_use(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_or_not_not_extra_and_use(
-; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_or_not_not_extra_and_use
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[AND2]], -1
-; CHECK-NEXT:    [[OR:%.*]] = or i32 [[NOT2]], [[B:%.*]]
+; CHECK-NEXT:    [[OR:%.*]] = or i32 [[NOT2]], [[B]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
@@ -2080,9 +2194,10 @@ define i32 @and_or_not_not_extra_and_use(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_or_not_not_extra_or_use1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_or_not_not_extra_or_use1(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[A:%.*]]
-; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_or_not_not_extra_or_use1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[A]]
+; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[AND2]], -1
 ; CHECK-NEXT:    [[OR:%.*]] = or i32 [[NOT2]], [[B]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[AND1]], [[OR]]
@@ -2100,9 +2215,10 @@ define i32 @and_or_not_not_extra_or_use1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_or_not_not_extra_or_use2(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_or_not_not_extra_or_use2(
-; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A:%.*]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[C]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_or_not_not_extra_or_use2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A]], [[C]]
+; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    call void @use(i32 [[AND2]])
@@ -2119,10 +2235,11 @@ define i32 @and_or_not_not_extra_or_use2(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_or_not_not_2_extra_uses(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_or_not_not_2_extra_uses(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_or_not_not_2_extra_uses
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[A]]
 ; CHECK-NEXT:    call void @use(i32 [[AND1]])
-; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A]], [[C:%.*]]
+; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[AND2]], -1
 ; CHECK-NEXT:    [[OR:%.*]] = or i32 [[NOT2]], [[B]]
 ; CHECK-NEXT:    call void @use(i32 [[OR]])
@@ -2141,9 +2258,10 @@ define i32 @and_or_not_not_2_extra_uses(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_or_not_not_wrong_a(i32 %a, i32 %b, i32 %c, i32 %d) {
-; CHECK-LABEL: @and_or_not_not_wrong_a(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[D:%.*]]
-; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_or_not_not_wrong_a
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]], i32 [[D:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[D]]
+; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[AND2]], -1
 ; CHECK-NEXT:    [[OR:%.*]] = or i32 [[NOT2]], [[B]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[AND1]], [[OR]]
@@ -2159,12 +2277,13 @@ define i32 @and_or_not_not_wrong_a(i32 %a, i32 %b, i32 %c, i32 %d) {
 }
 
 define i32 @and_or_not_not_wrong_b(i32 %a, i32 %b, i32 %c, i32 %d) {
-; CHECK-LABEL: @and_or_not_not_wrong_b(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[D:%.*]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_or_not_not_wrong_b
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]], i32 [[D:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[D]], [[A]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
-; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A]], [[C:%.*]]
+; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[A]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[AND2]], -1
-; CHECK-NEXT:    [[OR:%.*]] = or i32 [[NOT2]], [[B:%.*]]
+; CHECK-NEXT:    [[OR:%.*]] = or i32 [[NOT2]], [[B]]
 ; CHECK-NEXT:    [[AND3:%.*]] = and i32 [[OR]], [[NOT1]]
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -2180,10 +2299,11 @@ define i32 @and_or_not_not_wrong_b(i32 %a, i32 %b, i32 %c, i32 %d) {
 ; (a & ~(b | c)) | ~(a | (b ^ c)) --> (~a & b & c) | ~(b | c)
 
 define i32 @and_not_or_or_not_or_xor(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or_or_not_or_xor(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_or_not_or_xor
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[XOR1]], [[A:%.*]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[XOR1]], [[A]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[OR1]], [[OR2]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP1]], -1
 ; CHECK-NEXT:    ret i32 [[OR3]]
@@ -2199,10 +2319,11 @@ define i32 @and_not_or_or_not_or_xor(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_not_or_or_not_or_xor_commute1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or_or_not_or_xor_commute1(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[C:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_or_not_or_xor_commute1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[XOR1]], [[A:%.*]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[XOR1]], [[A]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[OR1]], [[OR2]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP1]], -1
 ; CHECK-NEXT:    ret i32 [[OR3]]
@@ -2218,9 +2339,10 @@ define i32 @and_not_or_or_not_or_xor_commute1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_not_or_or_not_or_xor_commute2(i32 %a0, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or_or_not_or_xor_commute2(
-; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0:%.*]]
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_or_not_or_xor_commute2
+; CHECK-SAME: (i32 [[A0:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0]]
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[XOR1]], [[A]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[OR1]], [[OR2]]
@@ -2239,10 +2361,11 @@ define i32 @and_not_or_or_not_or_xor_commute2(i32 %a0, i32 %b, i32 %c) {
 }
 
 define i32 @and_not_or_or_not_or_xor_commute3(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or_or_not_or_xor_commute3(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_or_not_or_xor_commute3
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[C]], [[B]]
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[XOR1]], [[A:%.*]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[XOR1]], [[A]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[OR1]], [[OR2]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP1]], -1
 ; CHECK-NEXT:    ret i32 [[OR3]]
@@ -2258,9 +2381,10 @@ define i32 @and_not_or_or_not_or_xor_commute3(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_not_or_or_not_or_xor_commute4(i32 %a0, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or_or_not_or_xor_commute4(
-; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0:%.*]]
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_or_not_or_xor_commute4
+; CHECK-SAME: (i32 [[A0:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0]]
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[A]], [[XOR1]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[OR1]], [[OR2]]
@@ -2279,10 +2403,11 @@ define i32 @and_not_or_or_not_or_xor_commute4(i32 %a0, i32 %b, i32 %c) {
 }
 
 define i32 @and_not_or_or_not_or_xor_commute5(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or_or_not_or_xor_commute5(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_or_not_or_xor_commute5
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[XOR1]], [[A:%.*]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[XOR1]], [[A]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[OR1]], [[OR2]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP1]], -1
 ; CHECK-NEXT:    ret i32 [[OR3]]
@@ -2298,10 +2423,11 @@ define i32 @and_not_or_or_not_or_xor_commute5(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_not_or_or_not_or_xor_use1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or_or_not_or_xor_use1(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_or_not_or_xor_use1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[XOR1]], [[A:%.*]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[XOR1]], [[A]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[OR1]], [[OR2]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP1]], -1
 ; CHECK-NEXT:    call void @use(i32 [[OR1]])
@@ -2319,11 +2445,12 @@ define i32 @and_not_or_or_not_or_xor_use1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_not_or_or_not_or_xor_use2(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or_or_not_or_xor_use2(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_or_not_or_xor_use2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[OR1]], -1
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[XOR1]], [[A:%.*]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[XOR1]], [[A]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[OR1]], [[OR2]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP1]], -1
 ; CHECK-NEXT:    call void @use(i32 [[NOT1]])
@@ -2341,10 +2468,11 @@ define i32 @and_not_or_or_not_or_xor_use2(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_not_or_or_not_or_xor_use3(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or_or_not_or_xor_use3(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_or_not_or_xor_use3
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[OR1]], -1
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT1]], [[A:%.*]]
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT1]], [[A]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[XOR1]], [[A]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[OR2]], -1
@@ -2364,10 +2492,11 @@ define i32 @and_not_or_or_not_or_xor_use3(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_not_or_or_not_or_xor_use4(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or_or_not_or_xor_use4(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_or_not_or_xor_use4
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[XOR1]], [[A:%.*]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[XOR1]], [[A]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[OR1]], [[OR2]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP1]], -1
 ; CHECK-NEXT:    call void @use(i32 [[XOR1]])
@@ -2385,10 +2514,11 @@ define i32 @and_not_or_or_not_or_xor_use4(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_not_or_or_not_or_xor_use5(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or_or_not_or_xor_use5(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_or_not_or_xor_use5
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[XOR1]], [[A:%.*]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[XOR1]], [[A]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[OR1]], [[OR2]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP1]], -1
 ; CHECK-NEXT:    call void @use(i32 [[OR2]])
@@ -2406,10 +2536,11 @@ define i32 @and_not_or_or_not_or_xor_use5(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @and_not_or_or_not_or_xor_use6(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @and_not_or_or_not_or_xor_use6(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_not_or_or_not_or_xor_use6
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[OR1]], -1
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT1]], [[A:%.*]]
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT1]], [[A]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[XOR1]], [[A]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[OR2]], -1
@@ -2433,10 +2564,11 @@ define i32 @and_not_or_or_not_or_xor_use6(i32 %a, i32 %b, i32 %c) {
 ; It is invalid as is, but feezing %a and %b will make it valid.
 
 define i32 @or_not_and_and_not_and_xor(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and_and_not_and_xor(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_and_not_and_xor
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[A:%.*]]
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[A]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[XOR1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[AND2]], [[OR1]]
@@ -2453,10 +2585,11 @@ define i32 @or_not_and_and_not_and_xor(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_not_and_and_not_and_xor_commute1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and_and_not_and_xor_commute1(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[C:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_and_not_and_xor_commute1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[A:%.*]]
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[A]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[XOR1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[AND2]], [[OR1]]
@@ -2473,9 +2606,10 @@ define i32 @or_not_and_and_not_and_xor_commute1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_not_and_and_not_and_xor_commute2(i32 %a0, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and_and_not_and_xor_commute2(
-; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0:%.*]]
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_and_not_and_xor_commute2
+; CHECK-SAME: (i32 [[A0:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0]]
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
 ; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[A]], [[NOT1]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
@@ -2495,10 +2629,11 @@ define i32 @or_not_and_and_not_and_xor_commute2(i32 %a0, i32 %b, i32 %c) {
 }
 
 define i32 @or_not_and_and_not_and_xor_commute3(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and_and_not_and_xor_commute3(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_and_not_and_xor_commute3
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[A:%.*]]
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[A]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[XOR1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[AND2]], [[OR1]]
@@ -2515,9 +2650,10 @@ define i32 @or_not_and_and_not_and_xor_commute3(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_not_and_and_not_and_xor_commute4(i32 %a0, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and_and_not_and_xor_commute4(
-; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0:%.*]]
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_and_not_and_xor_commute4
+; CHECK-SAME: (i32 [[A0:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = sdiv i32 42, [[A0]]
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
 ; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[A]], [[NOT1]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
@@ -2537,10 +2673,11 @@ define i32 @or_not_and_and_not_and_xor_commute4(i32 %a0, i32 %b, i32 %c) {
 }
 
 define i32 @or_not_and_and_not_and_xor_commute5(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and_and_not_and_xor_commute5(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_and_not_and_xor_commute5
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[A:%.*]]
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[A]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[XOR1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[AND2]], [[OR1]]
@@ -2557,10 +2694,11 @@ define i32 @or_not_and_and_not_and_xor_commute5(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_not_and_and_not_and_xor_use1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and_and_not_and_xor_use1(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_and_not_and_xor_use1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[A:%.*]]
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[A]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[XOR1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[AND2]], [[OR1]]
@@ -2579,10 +2717,11 @@ define i32 @or_not_and_and_not_and_xor_use1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_not_and_and_not_and_xor_use2(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and_and_not_and_xor_use2(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_and_not_and_xor_use2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[A:%.*]]
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[A]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[XOR1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[AND2]], [[OR1]]
@@ -2601,10 +2740,11 @@ define i32 @or_not_and_and_not_and_xor_use2(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_not_and_and_not_and_xor_use3(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and_and_not_and_xor_use3(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_and_not_and_xor_use3
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[A:%.*]]
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[A]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[XOR1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[AND2]], [[OR1]]
@@ -2623,10 +2763,11 @@ define i32 @or_not_and_and_not_and_xor_use3(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_not_and_and_not_and_xor_use4(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and_and_not_and_xor_use4(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_and_not_and_xor_use4
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[A:%.*]]
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[A]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[XOR1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[AND2]], [[OR1]]
@@ -2645,10 +2786,11 @@ define i32 @or_not_and_and_not_and_xor_use4(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_not_and_and_not_and_xor_use5(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and_and_not_and_xor_use5(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_and_not_and_xor_use5
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[A:%.*]]
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[A]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[XOR1]], [[A]]
 ; CHECK-NEXT:    [[AND3:%.*]] = xor i32 [[AND2]], [[OR1]]
@@ -2667,10 +2809,11 @@ define i32 @or_not_and_and_not_and_xor_use5(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @or_not_and_and_not_and_xor_use6(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @or_not_and_and_not_and_xor_use6(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@or_not_and_and_not_and_xor_use6
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[A:%.*]]
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT1]], [[A]]
 ; CHECK-NEXT:    [[XOR1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[XOR1]], [[A]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[AND2]], -1
@@ -2692,9 +2835,10 @@ define i32 @or_not_and_and_not_and_xor_use6(i32 %a, i32 %b, i32 %c) {
 ; (~a & b & c) | ~(a | b | c) -> ~(a | (b ^ c))
 
 define i32 @not_and_and_or_not_or_or(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_not_or_or(
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C:%.*]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_not_or_or
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -2709,9 +2853,10 @@ define i32 @not_and_and_or_not_or_or(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_not_or_or_commute1_or(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_not_or_or_commute1_or(
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C:%.*]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_not_or_or_commute1_or
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -2726,9 +2871,10 @@ define i32 @not_and_and_or_not_or_or_commute1_or(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_not_or_or_commute2_or(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_not_or_or_commute2_or(
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C:%.*]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_not_or_or_commute2_or
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -2743,9 +2889,10 @@ define i32 @not_and_and_or_not_or_or_commute2_or(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_not_or_or_commute1_and(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_not_or_or_commute1_and(
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_not_or_or_commute1_and
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -2760,9 +2907,10 @@ define i32 @not_and_and_or_not_or_or_commute1_and(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_not_or_or_commute2_and(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_not_or_or_commute2_and(
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_not_or_or_commute2_and
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -2777,9 +2925,10 @@ define i32 @not_and_and_or_not_or_or_commute2_and(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_not_or_or_commute1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_not_or_or_commute1(
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C:%.*]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_not_or_or_commute1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -2794,10 +2943,11 @@ define i32 @not_and_and_or_not_or_or_commute1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_not_or_or_commute2(i32 %a, i32 %b, i32 %c0) {
-; CHECK-LABEL: @not_and_and_or_not_or_or_commute2(
-; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_not_or_or_commute2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C0:%.*]]) {
+; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -2813,10 +2963,11 @@ define i32 @not_and_and_or_not_or_or_commute2(i32 %a, i32 %b, i32 %c0) {
 }
 
 define i32 @not_and_and_or_not_or_or_commute3(i32 %a, i32 %b0, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_not_or_or_commute3(
-; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_not_or_or_commute3
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B0:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -2832,10 +2983,11 @@ define i32 @not_and_and_or_not_or_or_commute3(i32 %a, i32 %b0, i32 %c) {
 }
 
 define i32 @not_and_and_or_not_or_or_commute4(i32 %a, i32 %b, i32 %c0) {
-; CHECK-LABEL: @not_and_and_or_not_or_or_commute4(
-; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_not_or_or_commute4
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C0:%.*]]) {
+; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    ret i32 [[OR3]]
 ;
@@ -2851,9 +3003,10 @@ define i32 @not_and_and_or_not_or_or_commute4(i32 %a, i32 %b, i32 %c0) {
 }
 
 define i32 @not_and_and_or_not_or_or_use1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_not_or_or_use1(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[A:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C:%.*]], [[B]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_not_or_or_use1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[A]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    call void @use(i32 [[OR1]])
@@ -2871,9 +3024,10 @@ define i32 @not_and_and_or_not_or_or_use1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_not_or_or_use2(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_not_or_or_use2(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[A:%.*]]
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[OR1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_not_or_or_use2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[A]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[OR1]], [[C]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
@@ -2892,9 +3046,10 @@ define i32 @not_and_and_or_not_or_or_use2(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_not_or_or_use3(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_not_or_or_use3(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[A:%.*]]
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[OR1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_not_or_or_use3
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[A]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[OR1]], [[C]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[OR2]], -1
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT2]], [[B]]
@@ -2915,9 +3070,10 @@ define i32 @not_and_and_or_not_or_or_use3(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_not_or_or_use4(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_not_or_or_use4(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_not_or_or_use4
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    call void @use(i32 [[NOT2]])
@@ -2935,10 +3091,11 @@ define i32 @not_and_and_or_not_or_or_use4(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_not_or_or_use5(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_not_or_or_use5(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT2]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C:%.*]], [[B]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_not_or_or_use5
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT2]], [[B]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
 ; CHECK-NEXT:    [[OR3:%.*]] = xor i32 [[TMP2]], -1
 ; CHECK-NEXT:    call void @use(i32 [[AND1]])
@@ -2956,9 +3113,10 @@ define i32 @not_and_and_or_not_or_or_use5(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_not_or_or_use6(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_not_or_or_use6(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[A:%.*]]
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[OR1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_not_or_or_use6
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[A]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[OR1]], [[C]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[OR2]], -1
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT2]], [[B]]
@@ -2981,9 +3139,10 @@ define i32 @not_and_and_or_not_or_or_use6(i32 %a, i32 %b, i32 %c) {
 ; (~a | b | c) & ~(a & b & c) -> ~a | (b ^ c)
 
 define i32 @not_or_or_and_not_and_and(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_not_and_and(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_not_and_and
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[AND3:%.*]] = or i32 [[TMP1]], [[NOT2]]
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -2998,9 +3157,10 @@ define i32 @not_or_or_and_not_and_and(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_not_and_and_commute1_and(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_not_and_and_commute1_and(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_not_and_and_commute1_and
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[AND3:%.*]] = or i32 [[TMP1]], [[NOT2]]
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -3015,9 +3175,10 @@ define i32 @not_or_or_and_not_and_and_commute1_and(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_not_and_and_commute2_and(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_not_and_and_commute2_and(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_not_and_and_commute2_and
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[AND3:%.*]] = or i32 [[TMP1]], [[NOT2]]
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -3032,9 +3193,10 @@ define i32 @not_or_or_and_not_and_and_commute2_and(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_not_and_and_commute1_or(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_not_and_and_commute1_or(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_not_and_and_commute1_or
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[AND3:%.*]] = or i32 [[TMP1]], [[NOT2]]
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -3049,9 +3211,10 @@ define i32 @not_or_or_and_not_and_and_commute1_or(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_not_and_and_commute2_or(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_not_and_and_commute2_or(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_not_and_and_commute2_or
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[AND3:%.*]] = or i32 [[TMP1]], [[NOT2]]
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -3066,9 +3229,10 @@ define i32 @not_or_or_and_not_and_and_commute2_or(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_not_and_and_commute1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_not_and_and_commute1(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_not_and_and_commute1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[AND3:%.*]] = or i32 [[TMP1]], [[NOT2]]
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -3083,10 +3247,11 @@ define i32 @not_or_or_and_not_and_and_commute1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_not_and_and_commute2(i32 %a, i32 %b, i32 %c0) {
-; CHECK-LABEL: @not_or_or_and_not_and_and_commute2(
-; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0:%.*]]
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_not_and_and_commute2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C0:%.*]]) {
+; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0]]
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[AND3:%.*]] = or i32 [[TMP1]], [[NOT2]]
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -3102,10 +3267,11 @@ define i32 @not_or_or_and_not_and_and_commute2(i32 %a, i32 %b, i32 %c0) {
 }
 
 define i32 @not_or_or_and_not_and_and_commute3(i32 %a, i32 %b0, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_not_and_and_commute3(
-; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0:%.*]]
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_not_and_and_commute3
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B0:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0]]
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], [[C]]
 ; CHECK-NEXT:    [[AND3:%.*]] = or i32 [[TMP1]], [[NOT2]]
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -3121,10 +3287,11 @@ define i32 @not_or_or_and_not_and_and_commute3(i32 %a, i32 %b0, i32 %c) {
 }
 
 define i32 @not_or_or_and_not_and_and_commute4(i32 %a, i32 %b, i32 %c0) {
-; CHECK-LABEL: @not_or_or_and_not_and_and_commute4(
-; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0:%.*]]
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_not_and_and_commute4
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C0:%.*]]) {
+; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0]]
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[AND3:%.*]] = or i32 [[TMP1]], [[NOT2]]
 ; CHECK-NEXT:    ret i32 [[AND3]]
 ;
@@ -3140,10 +3307,11 @@ define i32 @not_or_or_and_not_and_and_commute4(i32 %a, i32 %b, i32 %c0) {
 }
 
 define i32 @not_or_or_and_not_and_and_use1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_not_and_and_use1(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_not_and_and_use1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[A]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C:%.*]], [[B]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[AND3:%.*]] = or i32 [[TMP1]], [[NOT2]]
 ; CHECK-NEXT:    call void @use(i32 [[AND1]])
 ; CHECK-NEXT:    ret i32 [[AND3]]
@@ -3160,9 +3328,10 @@ define i32 @not_or_or_and_not_and_and_use1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_not_and_and_use2(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_not_and_and_use2(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[A:%.*]]
-; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[AND1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_not_and_and_use2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[A]]
+; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[AND1]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[AND3:%.*]] = or i32 [[TMP1]], [[NOT2]]
@@ -3181,9 +3350,10 @@ define i32 @not_or_or_and_not_and_and_use2(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_not_and_and_use3(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_not_and_and_use3(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[A:%.*]]
-; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[AND1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_not_and_and_use3
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[A]]
+; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[AND1]], [[C]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND2]], -1
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT2]], [[B]]
@@ -3204,9 +3374,10 @@ define i32 @not_or_or_and_not_and_and_use3(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_not_and_and_use4(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_not_and_and_use4(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C:%.*]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_not_and_and_use4
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[AND3:%.*]] = or i32 [[TMP1]], [[NOT2]]
 ; CHECK-NEXT:    call void @use(i32 [[NOT2]])
 ; CHECK-NEXT:    ret i32 [[AND3]]
@@ -3223,10 +3394,11 @@ define i32 @not_or_or_and_not_and_and_use4(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_not_and_and_use5(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_not_and_and_use5(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT2]], [[B:%.*]]
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C:%.*]], [[B]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_not_and_and_use5
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT2]], [[B]]
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[C]], [[B]]
 ; CHECK-NEXT:    [[AND3:%.*]] = or i32 [[TMP1]], [[NOT2]]
 ; CHECK-NEXT:    call void @use(i32 [[OR1]])
 ; CHECK-NEXT:    ret i32 [[AND3]]
@@ -3243,9 +3415,10 @@ define i32 @not_or_or_and_not_and_and_use5(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_not_and_and_use6(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_not_and_and_use6(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[A:%.*]]
-; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[AND1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_not_and_and_use6
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[A]]
+; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[AND1]], [[C]]
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT2]], [[B]]
 ; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[OR1]], [[C]]
@@ -3267,10 +3440,11 @@ define i32 @not_or_or_and_not_and_and_use6(i32 %a, i32 %b, i32 %c) {
 ; (~a & b & c) | ~(a | b) -> (c | ~b) & ~a
 
 define i32 @not_and_and_or_no_or(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_no_or(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], -1
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_no_or
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[C]]
 ; CHECK-NEXT:    [[OR2:%.*]] = and i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    ret i32 [[OR2]]
 ;
@@ -3284,10 +3458,11 @@ define i32 @not_and_and_or_no_or(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_no_or_commute1_and(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_no_or_commute1_and(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], -1
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_no_or_commute1_and
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[C]]
 ; CHECK-NEXT:    [[OR2:%.*]] = and i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    ret i32 [[OR2]]
 ;
@@ -3301,10 +3476,11 @@ define i32 @not_and_and_or_no_or_commute1_and(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_no_or_commute2_and(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_no_or_commute2_and(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], -1
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_no_or_commute2_and
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[C]]
 ; CHECK-NEXT:    [[OR2:%.*]] = and i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    ret i32 [[OR2]]
 ;
@@ -3318,10 +3494,11 @@ define i32 @not_and_and_or_no_or_commute2_and(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_no_or_commute1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_no_or_commute1(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], -1
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_no_or_commute1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[C]]
 ; CHECK-NEXT:    [[OR2:%.*]] = and i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    ret i32 [[OR2]]
 ;
@@ -3335,11 +3512,12 @@ define i32 @not_and_and_or_no_or_commute1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_no_or_commute2(i32 %a, i32 %b0, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_no_or_commute2(
-; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0:%.*]]
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_no_or_commute2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B0:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0]]
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[C:%.*]]
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[C]]
 ; CHECK-NEXT:    [[OR2:%.*]] = and i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    ret i32 [[OR2]]
 ;
@@ -3354,10 +3532,11 @@ define i32 @not_and_and_or_no_or_commute2(i32 %a, i32 %b0, i32 %c) {
 }
 
 define i32 @not_and_and_or_no_or_commute3(i32 %a, i32 %b, i32 %c0) {
-; CHECK-LABEL: @not_and_and_or_no_or_commute3(
-; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0:%.*]]
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], -1
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_no_or_commute3
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C0:%.*]]) {
+; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0]]
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
 ; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[C]], [[TMP1]]
 ; CHECK-NEXT:    [[OR2:%.*]] = and i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    ret i32 [[OR2]]
@@ -3373,10 +3552,11 @@ define i32 @not_and_and_or_no_or_commute3(i32 %a, i32 %b, i32 %c0) {
 }
 
 define i32 @not_and_and_or_no_or_use1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_no_or_use1(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], -1
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_no_or_use1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[C]]
 ; CHECK-NEXT:    [[OR2:%.*]] = and i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    call void @use(i32 [[NOT2]])
 ; CHECK-NEXT:    ret i32 [[OR2]]
@@ -3392,10 +3572,11 @@ define i32 @not_and_and_or_no_or_use1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_no_or_use2(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_no_or_use2(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], -1
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_no_or_use2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[C]]
 ; CHECK-NEXT:    [[OR2:%.*]] = and i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    call void @use(i32 [[NOT2]])
 ; CHECK-NEXT:    ret i32 [[OR2]]
@@ -3411,10 +3592,11 @@ define i32 @not_and_and_or_no_or_use2(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_no_or_use3(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_no_or_use3(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], -1
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_no_or_use3
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[C]]
 ; CHECK-NEXT:    [[OR2:%.*]] = and i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    call void @use(i32 [[NOT2]])
 ; CHECK-NEXT:    ret i32 [[OR2]]
@@ -3430,10 +3612,11 @@ define i32 @not_and_and_or_no_or_use3(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_no_or_use4(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_no_or_use4(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], -1
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_no_or_use4
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[C]]
 ; CHECK-NEXT:    [[OR2:%.*]] = and i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    call void @use(i32 [[NOT2]])
 ; CHECK-NEXT:    ret i32 [[OR2]]
@@ -3449,12 +3632,13 @@ define i32 @not_and_and_or_no_or_use4(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_no_or_use5(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_no_or_use5(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_no_or_use5
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[A]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[OR1]], -1
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT2]], [[B]]
-; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[AND1]], [[C:%.*]]
+; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[AND1]], [[C]]
 ; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[AND2]], [[NOT1]]
 ; CHECK-NEXT:    call void @use(i32 [[OR1]])
 ; CHECK-NEXT:    ret i32 [[OR2]]
@@ -3470,12 +3654,13 @@ define i32 @not_and_and_or_no_or_use5(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_no_or_use6(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_no_or_use6(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_no_or_use6
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[A]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[OR1]], -1
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT2]], [[B]]
-; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[AND1]], [[C:%.*]]
+; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[AND1]], [[C]]
 ; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[AND2]], [[NOT1]]
 ; CHECK-NEXT:    call void @use(i32 [[NOT1]])
 ; CHECK-NEXT:    ret i32 [[OR2]]
@@ -3491,11 +3676,12 @@ define i32 @not_and_and_or_no_or_use6(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_no_or_use7(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_no_or_use7(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT2]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_no_or_use7
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT2]], [[B]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
-; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[C:%.*]]
+; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[TMP1]], [[C]]
 ; CHECK-NEXT:    [[OR2:%.*]] = and i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    call void @use(i32 [[AND1]])
 ; CHECK-NEXT:    ret i32 [[OR2]]
@@ -3511,12 +3697,13 @@ define i32 @not_and_and_or_no_or_use7(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_and_and_or_no_or_use8(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_and_and_or_no_or_use8(
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B:%.*]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_and_and_or_no_or_use8
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[B]], [[A]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[OR1]], -1
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[NOT2]], [[B]]
-; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[AND1]], [[C:%.*]]
+; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[AND1]], [[C]]
 ; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[AND2]], [[NOT1]]
 ; CHECK-NEXT:    call void @use(i32 [[AND2]])
 ; CHECK-NEXT:    ret i32 [[OR2]]
@@ -3534,10 +3721,11 @@ define i32 @not_and_and_or_no_or_use8(i32 %a, i32 %b, i32 %c) {
 ; (~a | b | c) & ~(a & b) -> (c & ~b) | ~a
 
 define i32 @not_or_or_and_no_and(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_no_and(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], -1
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_no_and
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = or i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    ret i32 [[AND2]]
 ;
@@ -3551,10 +3739,11 @@ define i32 @not_or_or_and_no_and(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_no_and_commute1_or(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_no_and_commute1_or(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], -1
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_no_and_commute1_or
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = or i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    ret i32 [[AND2]]
 ;
@@ -3568,10 +3757,11 @@ define i32 @not_or_or_and_no_and_commute1_or(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_no_and_commute2_or(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_no_and_commute2_or(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], -1
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_no_and_commute2_or
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = or i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    ret i32 [[AND2]]
 ;
@@ -3585,10 +3775,11 @@ define i32 @not_or_or_and_no_and_commute2_or(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_no_and_commute1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_no_and_commute1(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], -1
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_no_and_commute1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = or i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    ret i32 [[AND2]]
 ;
@@ -3602,11 +3793,12 @@ define i32 @not_or_or_and_no_and_commute1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_no_and_commute2(i32 %a, i32 %b0, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_no_and_commute2(
-; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0:%.*]]
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_no_and_commute2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B0:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[B:%.*]] = sdiv i32 42, [[B0]]
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[C:%.*]]
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = or i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    ret i32 [[AND2]]
 ;
@@ -3621,10 +3813,11 @@ define i32 @not_or_or_and_no_and_commute2(i32 %a, i32 %b0, i32 %c) {
 }
 
 define i32 @not_or_or_and_no_and_commute3(i32 %a, i32 %b, i32 %c0) {
-; CHECK-LABEL: @not_or_or_and_no_and_commute3(
-; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0:%.*]]
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], -1
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_no_and_commute3
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C0:%.*]]) {
+; CHECK-NEXT:    [[C:%.*]] = sdiv i32 42, [[C0]]
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[C]], [[TMP1]]
 ; CHECK-NEXT:    [[AND2:%.*]] = or i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    ret i32 [[AND2]]
@@ -3640,10 +3833,11 @@ define i32 @not_or_or_and_no_and_commute3(i32 %a, i32 %b, i32 %c0) {
 }
 
 define i32 @not_or_or_and_no_and_use1(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_no_and_use1(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], -1
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_no_and_use1
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = or i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    call void @use(i32 [[NOT2]])
 ; CHECK-NEXT:    ret i32 [[AND2]]
@@ -3659,10 +3853,11 @@ define i32 @not_or_or_and_no_and_use1(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_no_and_use2(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_no_and_use2(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], -1
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_no_and_use2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = or i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    call void @use(i32 [[NOT2]])
 ; CHECK-NEXT:    ret i32 [[AND2]]
@@ -3678,10 +3873,11 @@ define i32 @not_or_or_and_no_and_use2(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_no_and_use3(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_no_and_use3(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], -1
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_no_and_use3
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = or i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    call void @use(i32 [[NOT2]])
 ; CHECK-NEXT:    ret i32 [[AND2]]
@@ -3697,10 +3893,11 @@ define i32 @not_or_or_and_no_and_use3(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_no_and_use4(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_no_and_use4(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B:%.*]], -1
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[C:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_no_and_use4
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = or i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    call void @use(i32 [[NOT2]])
 ; CHECK-NEXT:    ret i32 [[AND2]]
@@ -3716,12 +3913,13 @@ define i32 @not_or_or_and_no_and_use4(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_no_and_use5(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_no_and_use5(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_no_and_use5
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[A]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT2]], [[B]]
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[OR1]], [[C:%.*]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[OR1]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[OR2]], [[NOT1]]
 ; CHECK-NEXT:    call void @use(i32 [[AND1]])
 ; CHECK-NEXT:    ret i32 [[AND2]]
@@ -3737,12 +3935,13 @@ define i32 @not_or_or_and_no_and_use5(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_no_and_use6(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_no_and_use6(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_no_and_use6
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[A]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT2]], [[B]]
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[OR1]], [[C:%.*]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[OR1]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[OR2]], [[NOT1]]
 ; CHECK-NEXT:    call void @use(i32 [[NOT1]])
 ; CHECK-NEXT:    ret i32 [[AND2]]
@@ -3758,11 +3957,12 @@ define i32 @not_or_or_and_no_and_use6(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_no_and_use7(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_no_and_use7(
-; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT2]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_no_and_use7
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT2]], [[B]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[B]], -1
-; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[C:%.*]]
+; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = or i32 [[TMP2]], [[NOT2]]
 ; CHECK-NEXT:    call void @use(i32 [[OR1]])
 ; CHECK-NEXT:    ret i32 [[AND2]]
@@ -3778,12 +3978,13 @@ define i32 @not_or_or_and_no_and_use7(i32 %a, i32 %b, i32 %c) {
 }
 
 define i32 @not_or_or_and_no_and_use8(i32 %a, i32 %b, i32 %c) {
-; CHECK-LABEL: @not_or_or_and_no_and_use8(
-; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B:%.*]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@not_or_or_and_no_and_use8
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[B]], [[A]]
 ; CHECK-NEXT:    [[NOT1:%.*]] = xor i32 [[AND1]], -1
 ; CHECK-NEXT:    [[NOT2:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[NOT2]], [[B]]
-; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[OR1]], [[C:%.*]]
+; CHECK-NEXT:    [[OR2:%.*]] = or i32 [[OR1]], [[C]]
 ; CHECK-NEXT:    [[AND2:%.*]] = and i32 [[OR2]], [[NOT1]]
 ; CHECK-NEXT:    call void @use(i32 [[OR2]])
 ; CHECK-NEXT:    ret i32 [[AND2]]
@@ -3799,9 +4000,10 @@ define i32 @not_or_or_and_no_and_use8(i32 %a, i32 %b, i32 %c) {
 }
 
 define i4 @and_orn_xor(i4 %a, i4 %b) {
-; CHECK-LABEL: @and_orn_xor(
-; CHECK-NEXT:    [[TMP1:%.*]] = xor i4 [[A:%.*]], -1
-; CHECK-NEXT:    [[R:%.*]] = and i4 [[TMP1]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_orn_xor
+; CHECK-SAME: (i4 [[A:%.*]], i4 [[B:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = xor i4 [[A]], -1
+; CHECK-NEXT:    [[R:%.*]] = and i4 [[TMP1]], [[B]]
 ; CHECK-NEXT:    ret i4 [[R]]
 ;
   %xor = xor i4 %a, %b
@@ -3812,9 +4014,10 @@ define i4 @and_orn_xor(i4 %a, i4 %b) {
 }
 
 define <2 x i4> @and_orn_xor_commute1(<2 x i4> %a, <2 x i4> %b) {
-; CHECK-LABEL: @and_orn_xor_commute1(
-; CHECK-NEXT:    [[TMP1:%.*]] = xor <2 x i4> [[A:%.*]], <i4 -1, i4 -1>
-; CHECK-NEXT:    [[R:%.*]] = and <2 x i4> [[TMP1]], [[B:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_orn_xor_commute1
+; CHECK-SAME: (<2 x i4> [[A:%.*]], <2 x i4> [[B:%.*]]) {
+; CHECK-NEXT:    [[TMP1:%.*]] = xor <2 x i4> [[A]], <i4 -1, i4 -1>
+; CHECK-NEXT:    [[R:%.*]] = and <2 x i4> [[TMP1]], [[B]]
 ; CHECK-NEXT:    ret <2 x i4> [[R]]
 ;
   %xor = xor <2 x i4> %a, %b
@@ -3825,8 +4028,9 @@ define <2 x i4> @and_orn_xor_commute1(<2 x i4> %a, <2 x i4> %b) {
 }
 
 define i32 @and_orn_xor_commute2(i32 %a, i32 %b) {
-; CHECK-LABEL: @and_orn_xor_commute2(
-; CHECK-NEXT:    [[XOR:%.*]] = xor i32 [[B:%.*]], [[A:%.*]]
+; CHECK-LABEL: define {{[^@]+}}@and_orn_xor_commute2
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]]) {
+; CHECK-NEXT:    [[XOR:%.*]] = xor i32 [[B]], [[A]]
 ; CHECK-NEXT:    call void @use(i32 [[XOR]])
 ; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[R:%.*]] = and i32 [[TMP1]], [[B]]
@@ -3841,11 +4045,12 @@ define i32 @and_orn_xor_commute2(i32 %a, i32 %b) {
 }
 
 define i32 @and_orn_xor_commute3(i32 %a, i32 %b) {
-; CHECK-LABEL: @and_orn_xor_commute3(
-; CHECK-NEXT:    [[NOTA:%.*]] = xor i32 [[A:%.*]], -1
+; CHECK-LABEL: define {{[^@]+}}@and_orn_xor_commute3
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]]) {
+; CHECK-NEXT:    [[NOTA:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    call void @use(i32 [[NOTA]])
 ; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[A]], -1
-; CHECK-NEXT:    [[R:%.*]] = and i32 [[TMP1]], [[B:%.*]]
+; CHECK-NEXT:    [[R:%.*]] = and i32 [[TMP1]], [[B]]
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
   %xor = xor i32 %b, %a
@@ -3857,9 +4062,10 @@ define i32 @and_orn_xor_commute3(i32 %a, i32 %b) {
 }
 
 define i32 @and_orn_xor_commute5(i32 %pa, i32 %pb) {
-; CHECK-LABEL: @and_orn_xor_commute5(
-; CHECK-NEXT:    [[A:%.*]] = mul i32 [[PA:%.*]], [[PA]]
-; CHECK-NEXT:    [[B:%.*]] = mul i32 [[PB:%.*]], [[PB]]
+; CHECK-LABEL: define {{[^@]+}}@and_orn_xor_commute5
+; CHECK-SAME: (i32 [[PA:%.*]], i32 [[PB:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = mul i32 [[PA]], [[PA]]
+; CHECK-NEXT:    [[B:%.*]] = mul i32 [[PB]], [[PB]]
 ; CHECK-NEXT:    [[NOTA:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[OR:%.*]] = or i32 [[B]], [[NOTA]]
 ; CHECK-NEXT:    call void @use(i32 [[OR]])
@@ -3878,9 +4084,10 @@ define i32 @and_orn_xor_commute5(i32 %pa, i32 %pb) {
 }
 
 define i32 @and_orn_xor_commute6(i32 %pa, i32 %pb) {
-; CHECK-LABEL: @and_orn_xor_commute6(
-; CHECK-NEXT:    [[A:%.*]] = mul i32 [[PA:%.*]], [[PA]]
-; CHECK-NEXT:    [[B:%.*]] = mul i32 [[PB:%.*]], [[PB]]
+; CHECK-LABEL: define {{[^@]+}}@and_orn_xor_commute6
+; CHECK-SAME: (i32 [[PA:%.*]], i32 [[PB:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = mul i32 [[PA]], [[PA]]
+; CHECK-NEXT:    [[B:%.*]] = mul i32 [[PB]], [[PB]]
 ; CHECK-NEXT:    [[XOR:%.*]] = xor i32 [[A]], [[B]]
 ; CHECK-NEXT:    call void @use(i32 [[XOR]])
 ; CHECK-NEXT:    [[NOTA:%.*]] = xor i32 [[A]], -1
@@ -3901,9 +4108,10 @@ define i32 @and_orn_xor_commute6(i32 %pa, i32 %pb) {
 }
 
 define i32 @and_orn_xor_commute7(i32 %pa, i32 %pb) {
-; CHECK-LABEL: @and_orn_xor_commute7(
-; CHECK-NEXT:    [[A:%.*]] = mul i32 [[PA:%.*]], [[PA]]
-; CHECK-NEXT:    [[B:%.*]] = mul i32 [[PB:%.*]], [[PB]]
+; CHECK-LABEL: define {{[^@]+}}@and_orn_xor_commute7
+; CHECK-SAME: (i32 [[PA:%.*]], i32 [[PB:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = mul i32 [[PA]], [[PA]]
+; CHECK-NEXT:    [[B:%.*]] = mul i32 [[PB]], [[PB]]
 ; CHECK-NEXT:    [[XOR:%.*]] = xor i32 [[B]], [[A]]
 ; CHECK-NEXT:    call void @use(i32 [[XOR]])
 ; CHECK-NEXT:    [[NOTA:%.*]] = xor i32 [[A]], -1
@@ -3927,9 +4135,10 @@ define i32 @and_orn_xor_commute7(i32 %pa, i32 %pb) {
 }
 
 define i32 @and_orn_xor_commute8(i32 %pa, i32 %pb) {
-; CHECK-LABEL: @and_orn_xor_commute8(
-; CHECK-NEXT:    [[A:%.*]] = mul i32 [[PA:%.*]], [[PA]]
-; CHECK-NEXT:    [[B:%.*]] = mul i32 [[PB:%.*]], [[PB]]
+; CHECK-LABEL: define {{[^@]+}}@and_orn_xor_commute8
+; CHECK-SAME: (i32 [[PA:%.*]], i32 [[PB:%.*]]) {
+; CHECK-NEXT:    [[A:%.*]] = mul i32 [[PA]], [[PA]]
+; CHECK-NEXT:    [[B:%.*]] = mul i32 [[PB]], [[PB]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = xor i32 [[A]], -1
 ; CHECK-NEXT:    [[R:%.*]] = and i32 [[B]], [[TMP1]]
 ; CHECK-NEXT:    ret i32 [[R]]
@@ -3942,3 +4151,60 @@ define i32 @and_orn_xor_commute8(i32 %pa, i32 %pb) {
   %r = and i32 %xor, %or
   ret i32 %r
 }
+
+define i32 @zext_zext_and_uses(i8 %x, i8 %y) {
+; CHECK-LABEL: define {{[^@]+}}@zext_zext_and_uses
+; CHECK-SAME: (i8 [[X:%.*]], i8 [[Y:%.*]]) {
+; CHECK-NEXT:    [[ZX:%.*]] = zext i8 [[X]] to i32
+; CHECK-NEXT:    call void @use(i32 [[ZX]])
+; CHECK-NEXT:    [[ZY:%.*]] = zext i8 [[Y]] to i32
+; CHECK-NEXT:    call void @use(i32 [[ZY]])
+; CHECK-NEXT:    [[R1:%.*]] = and i8 [[X]], [[Y]]
+; CHECK-NEXT:    [[R:%.*]] = zext i8 [[R1]] to i32
+; CHECK-NEXT:    ret i32 [[R]]
+;
+  %zx = zext i8 %x to i32
+  call void @use(i32 %zx)
+  %zy = zext i8 %y to i32
+  call void @use(i32 %zy)
+  %r = and i32 %zx, %zy
+  ret i32 %r
+}
+
+define i32 @sext_sext_or_uses(i8 %x, i8 %y) {
+; CHECK-LABEL: define {{[^@]+}}@sext_sext_or_uses
+; CHECK-SAME: (i8 [[X:%.*]], i8 [[Y:%.*]]) {
+; CHECK-NEXT:    [[SX:%.*]] = sext i8 [[X]] to i32
+; CHECK-NEXT:    call void @use(i32 [[SX]])
+; CHECK-NEXT:    [[SY:%.*]] = sext i8 [[Y]] to i32
+; CHECK-NEXT:    call void @use(i32 [[SY]])
+; CHECK-NEXT:    [[R1:%.*]] = or i8 [[X]], [[Y]]
+; CHECK-NEXT:    [[R:%.*]] = sext i8 [[R1]] to i32
+; CHECK-NEXT:    ret i32 [[R]]
+;
+  %sx = sext i8 %x to i32
+  call void @use(i32 %sx)
+  %sy = sext i8 %y to i32
+  call void @use(i32 %sy)
+  %r = or i32 %sx, %sy
+  ret i32 %r
+}
+
+define i32 @trunc_trunc_xor_uses(i65 %x, i65 %y) {
+; CHECK-LABEL: define {{[^@]+}}@trunc_trunc_xor_uses
+; CHECK-SAME: (i65 [[X:%.*]], i65 [[Y:%.*]]) {
+; CHECK-NEXT:    [[SX:%.*]] = trunc i65 [[X]] to i32
+; CHECK-NEXT:    call void @use(i32 [[SX]])
+; CHECK-NEXT:    [[SY:%.*]] = trunc i65 [[Y]] to i32
+; CHECK-NEXT:    call void @use(i32 [[SY]])
+; CHECK-NEXT:    [[R1:%.*]] = xor i65 [[X]], [[Y]]
+; CHECK-NEXT:    [[R:%.*]] = trunc i65 [[R1]] to i32
+; CHECK-NEXT:    ret i32 [[R]]
+;
+  %sx = trunc i65 %x to i32
+  call void @use(i32 %sx)
+  %sy = trunc i65 %y to i32
+  call void @use(i32 %sy)
+  %r = xor i32 %sx, %sy
+  ret i32 %r
+}


        


More information about the llvm-commits mailing list