[llvm] 5181c67 - AMDGPU/GlobalISel: Add some baseline tests for unmerge legalization

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 21 05:31:18 PST 2020


Author: Matt Arsenault
Date: 2020-01-21T08:31:10-05:00
New Revision: 5181c67febc8d4c69559055fe2bee086aae61996

URL: https://github.com/llvm/llvm-project/commit/5181c67febc8d4c69559055fe2bee086aae61996
DIFF: https://github.com/llvm/llvm-project/commit/5181c67febc8d4c69559055fe2bee086aae61996.diff

LOG: AMDGPU/GlobalISel: Add some baseline tests for unmerge legalization

Added: 
    

Modified: 
    llvm/test/CodeGen/AMDGPU/GlobalISel/legalize-unmerge-values.mir

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/AMDGPU/GlobalISel/legalize-unmerge-values.mir b/llvm/test/CodeGen/AMDGPU/GlobalISel/legalize-unmerge-values.mir
index 9b0068566305..0fd0155c56a2 100644
--- a/llvm/test/CodeGen/AMDGPU/GlobalISel/legalize-unmerge-values.mir
+++ b/llvm/test/CodeGen/AMDGPU/GlobalISel/legalize-unmerge-values.mir
@@ -228,6 +228,740 @@ body: |
     $vgpr3 = COPY %8
 ...
 
+---
+name: test_unmerge_s8_s48
+body: |
+  bb.0:
+    liveins: $vgpr0_vgpr1
+    ; CHECK-LABEL: name: test_unmerge_s8_s48
+    ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
+    ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 281474976710655
+    ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
+    ; CHECK: [[DEF:%[0-9]+]]:_(s96) = G_IMPLICIT_DEF
+    ; CHECK: [[INSERT:%[0-9]+]]:_(s96) = G_INSERT [[DEF]], [[C]](s64), 0
+    ; CHECK: [[INSERT1:%[0-9]+]]:_(s96) = G_INSERT [[INSERT]], [[C1]](s32), 64
+    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)
+    ; CHECK: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV]](s32), [[UV1]](s32)
+    ; CHECK: [[DEF1:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
+    ; CHECK: [[MV1:%[0-9]+]]:_(s192) = G_MERGE_VALUES [[MV]](s64), [[DEF1]](s64), [[DEF1]](s64)
+    ; CHECK: [[TRUNC:%[0-9]+]]:_(s96) = G_TRUNC [[MV1]](s192)
+    ; CHECK: [[EXTRACT:%[0-9]+]]:_(s64) = G_EXTRACT [[TRUNC]](s96), 0
+    ; CHECK: [[EXTRACT1:%[0-9]+]]:_(s32) = G_EXTRACT [[TRUNC]](s96), 64
+    ; CHECK: [[EXTRACT2:%[0-9]+]]:_(s64) = G_EXTRACT [[INSERT1]](s96), 0
+    ; CHECK: [[EXTRACT3:%[0-9]+]]:_(s32) = G_EXTRACT [[INSERT1]](s96), 64
+    ; CHECK: [[AND:%[0-9]+]]:_(s64) = G_AND [[EXTRACT]], [[EXTRACT2]]
+    ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[EXTRACT1]], [[EXTRACT3]]
+    ; CHECK: [[DEF2:%[0-9]+]]:_(s96) = G_IMPLICIT_DEF
+    ; CHECK: [[INSERT2:%[0-9]+]]:_(s96) = G_INSERT [[DEF2]], [[AND]](s64), 0
+    ; CHECK: [[INSERT3:%[0-9]+]]:_(s96) = G_INSERT [[INSERT2]], [[AND1]](s32), 64
+    ; CHECK: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
+    ; CHECK: [[DEF3:%[0-9]+]]:_(s96) = G_IMPLICIT_DEF
+    ; CHECK: [[INSERT4:%[0-9]+]]:_(s96) = G_INSERT [[DEF3]], [[C2]](s64), 0
+    ; CHECK: [[INSERT5:%[0-9]+]]:_(s96) = G_INSERT [[INSERT4]], [[C1]](s32), 64
+    ; CHECK: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[INSERT5]](s96)
+    ; CHECK: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 48
+    ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[INSERT3]](s96)
+    ; CHECK: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV2]](s32), [[UV3]](s32)
+    ; CHECK: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV4]](s32), [[C1]](s32)
+    ; CHECK: [[MV4:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[MV2]](s64), [[MV3]](s64)
+    ; CHECK: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
+    ; CHECK: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
+    ; CHECK: [[MV5:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[C4]](s64), [[C5]](s64)
+    ; CHECK: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[MV5]](s128)
+    ; CHECK: [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 64
+    ; CHECK: [[UV5:%[0-9]+]]:_(s64), [[UV6:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[MV4]](s128)
+    ; CHECK: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[TRUNC2]], [[C6]]
+    ; CHECK: [[SUB1:%[0-9]+]]:_(s32) = G_SUB [[C6]], [[TRUNC2]]
+    ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[TRUNC2]](s32), [[C6]]
+    ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[TRUNC2]](s32), [[C1]]
+    ; CHECK: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[UV5]], [[TRUNC2]](s32)
+    ; CHECK: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[UV5]], [[SUB1]](s32)
+    ; CHECK: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[UV6]], [[TRUNC2]](s32)
+    ; CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR]], [[SHL1]]
+    ; CHECK: [[SHL2:%[0-9]+]]:_(s64) = G_SHL [[UV5]], [[SUB]](s32)
+    ; CHECK: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s1), [[SHL]], [[C5]]
+    ; CHECK: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s1), [[OR]], [[SHL2]]
+    ; CHECK: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[ICMP1]](s1), [[UV6]], [[SELECT1]]
+    ; CHECK: [[UV7:%[0-9]+]]:_(s64), [[UV8:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[MV4]](s128)
+    ; CHECK: [[OR1:%[0-9]+]]:_(s64) = G_OR [[UV7]], [[SELECT]]
+    ; CHECK: [[OR2:%[0-9]+]]:_(s64) = G_OR [[UV8]], [[SELECT2]]
+    ; CHECK: [[SUB2:%[0-9]+]]:_(s32) = G_SUB [[TRUNC1]], [[C3]]
+    ; CHECK: [[SUB3:%[0-9]+]]:_(s32) = G_SUB [[C3]], [[TRUNC1]]
+    ; CHECK: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[TRUNC1]](s32), [[C3]]
+    ; CHECK: [[ICMP3:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[TRUNC1]](s32), [[C1]]
+    ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY [[OR1]](s64)
+    ; CHECK: [[SHL3:%[0-9]+]]:_(s64) = G_SHL [[COPY1]], [[TRUNC1]](s32)
+    ; CHECK: [[COPY2:%[0-9]+]]:_(s64) = COPY [[OR1]](s64)
+    ; CHECK: [[AND2:%[0-9]+]]:_(s64) = G_AND [[COPY2]], [[C]]
+    ; CHECK: [[LSHR1:%[0-9]+]]:_(s64) = G_LSHR [[AND2]], [[SUB3]](s32)
+    ; CHECK: [[COPY3:%[0-9]+]]:_(s64) = COPY [[OR2]](s64)
+    ; CHECK: [[SHL4:%[0-9]+]]:_(s64) = G_SHL [[COPY3]], [[TRUNC1]](s32)
+    ; CHECK: [[COPY4:%[0-9]+]]:_(s64) = COPY [[LSHR1]](s64)
+    ; CHECK: [[COPY5:%[0-9]+]]:_(s64) = COPY [[SHL4]](s64)
+    ; CHECK: [[OR3:%[0-9]+]]:_(s64) = G_OR [[COPY4]], [[COPY5]]
+    ; CHECK: [[C7:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
+    ; CHECK: [[COPY6:%[0-9]+]]:_(s64) = COPY [[OR1]](s64)
+    ; CHECK: [[SHL5:%[0-9]+]]:_(s64) = G_SHL [[COPY6]], [[SUB2]](s32)
+    ; CHECK: [[COPY7:%[0-9]+]]:_(s64) = COPY [[SHL3]](s64)
+    ; CHECK: [[COPY8:%[0-9]+]]:_(s64) = COPY [[C7]](s64)
+    ; CHECK: [[SELECT3:%[0-9]+]]:_(s64) = G_SELECT [[ICMP2]](s1), [[COPY7]], [[COPY8]]
+    ; CHECK: [[TRUNC3:%[0-9]+]]:_(s48) = G_TRUNC [[SELECT3]](s64)
+    ; CHECK: [[COPY9:%[0-9]+]]:_(s64) = COPY [[OR3]](s64)
+    ; CHECK: [[COPY10:%[0-9]+]]:_(s64) = COPY [[SHL5]](s64)
+    ; CHECK: [[SELECT4:%[0-9]+]]:_(s64) = G_SELECT [[ICMP2]](s1), [[COPY9]], [[COPY10]]
+    ; CHECK: [[COPY11:%[0-9]+]]:_(s64) = COPY [[OR2]](s64)
+    ; CHECK: [[COPY12:%[0-9]+]]:_(s64) = COPY [[SELECT4]](s64)
+    ; CHECK: [[SELECT5:%[0-9]+]]:_(s64) = G_SELECT [[ICMP3]](s1), [[COPY11]], [[COPY12]]
+    ; CHECK: [[TRUNC4:%[0-9]+]]:_(s48) = G_TRUNC [[SELECT5]](s64)
+    ; CHECK: [[UV9:%[0-9]+]]:_(s16), [[UV10:%[0-9]+]]:_(s16), [[UV11:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[TRUNC3]](s48)
+    ; CHECK: [[UV12:%[0-9]+]]:_(s16), [[UV13:%[0-9]+]]:_(s16), [[UV14:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[TRUNC4]](s48)
+    ; CHECK: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[UV9]](s16)
+    ; CHECK: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[UV10]](s16)
+    ; CHECK: [[C8:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
+    ; CHECK: [[SHL6:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C8]](s32)
+    ; CHECK: [[OR4:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL6]]
+    ; CHECK: [[ZEXT2:%[0-9]+]]:_(s32) = G_ZEXT [[UV11]](s16)
+    ; CHECK: [[ZEXT3:%[0-9]+]]:_(s32) = G_ZEXT [[UV12]](s16)
+    ; CHECK: [[SHL7:%[0-9]+]]:_(s32) = G_SHL [[ZEXT3]], [[C8]](s32)
+    ; CHECK: [[OR5:%[0-9]+]]:_(s32) = G_OR [[ZEXT2]], [[SHL7]]
+    ; CHECK: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR4]](s32), [[OR5]](s32)
+    ; CHECK: [[ZEXT4:%[0-9]+]]:_(s32) = G_ZEXT [[UV13]](s16)
+    ; CHECK: [[ZEXT5:%[0-9]+]]:_(s32) = G_ZEXT [[UV14]](s16)
+    ; CHECK: [[SHL8:%[0-9]+]]:_(s32) = G_SHL [[ZEXT5]], [[C8]](s32)
+    ; CHECK: [[OR6:%[0-9]+]]:_(s32) = G_OR [[ZEXT4]], [[SHL8]]
+    ; CHECK: [[COPY13:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
+    ; CHECK: [[COPY14:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
+    ; CHECK: [[SHL9:%[0-9]+]]:_(s32) = G_SHL [[COPY14]], [[C8]](s32)
+    ; CHECK: [[OR7:%[0-9]+]]:_(s32) = G_OR [[COPY13]], [[SHL9]]
+    ; CHECK: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR6]](s32), [[OR7]](s32)
+    ; CHECK: [[MV8:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[MV6]](s64), [[MV7]](s64)
+    ; CHECK: [[TRUNC5:%[0-9]+]]:_(s96) = G_TRUNC [[MV8]](s128)
+    ; CHECK: [[EXTRACT4:%[0-9]+]]:_(s64) = G_EXTRACT [[INSERT3]](s96), 0
+    ; CHECK: [[EXTRACT5:%[0-9]+]]:_(s32) = G_EXTRACT [[INSERT3]](s96), 64
+    ; CHECK: [[EXTRACT6:%[0-9]+]]:_(s64) = G_EXTRACT [[TRUNC5]](s96), 0
+    ; CHECK: [[COPY15:%[0-9]+]]:_(s64) = COPY [[SELECT5]](s64)
+    ; CHECK: [[EXTRACT7:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY15]](s64), 16
+    ; CHECK: [[OR8:%[0-9]+]]:_(s64) = G_OR [[EXTRACT4]], [[EXTRACT6]]
+    ; CHECK: [[OR9:%[0-9]+]]:_(s32) = G_OR [[EXTRACT5]], [[EXTRACT7]]
+    ; CHECK: [[DEF4:%[0-9]+]]:_(s96) = G_IMPLICIT_DEF
+    ; CHECK: [[INSERT6:%[0-9]+]]:_(s96) = G_INSERT [[DEF4]], [[OR8]](s64), 0
+    ; CHECK: [[INSERT7:%[0-9]+]]:_(s96) = G_INSERT [[INSERT6]], [[OR9]](s32), 64
+    ; CHECK: [[DEF5:%[0-9]+]]:_(s96) = G_IMPLICIT_DEF
+    ; CHECK: [[INSERT8:%[0-9]+]]:_(s96) = G_INSERT [[DEF5]], [[C4]](s64), 0
+    ; CHECK: [[INSERT9:%[0-9]+]]:_(s96) = G_INSERT [[INSERT8]], [[C1]](s32), 64
+    ; CHECK: [[TRUNC6:%[0-9]+]]:_(s32) = G_TRUNC [[INSERT9]](s96)
+    ; CHECK: [[UV15:%[0-9]+]]:_(s32), [[UV16:%[0-9]+]]:_(s32), [[UV17:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[INSERT7]](s96)
+    ; CHECK: [[MV9:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV15]](s32), [[UV16]](s32)
+    ; CHECK: [[MV10:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV17]](s32), [[C1]](s32)
+    ; CHECK: [[MV11:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[MV9]](s64), [[MV10]](s64)
+    ; CHECK: [[MV12:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[C4]](s64), [[C5]](s64)
+    ; CHECK: [[TRUNC7:%[0-9]+]]:_(s32) = G_TRUNC [[MV12]](s128)
+    ; CHECK: [[UV18:%[0-9]+]]:_(s64), [[UV19:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[MV11]](s128)
+    ; CHECK: [[SUB4:%[0-9]+]]:_(s32) = G_SUB [[TRUNC7]], [[C6]]
+    ; CHECK: [[SUB5:%[0-9]+]]:_(s32) = G_SUB [[C6]], [[TRUNC7]]
+    ; CHECK: [[ICMP4:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[TRUNC7]](s32), [[C6]]
+    ; CHECK: [[ICMP5:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[TRUNC7]](s32), [[C1]]
+    ; CHECK: [[SHL10:%[0-9]+]]:_(s64) = G_SHL [[UV18]], [[TRUNC7]](s32)
+    ; CHECK: [[LSHR2:%[0-9]+]]:_(s64) = G_LSHR [[UV18]], [[SUB5]](s32)
+    ; CHECK: [[SHL11:%[0-9]+]]:_(s64) = G_SHL [[UV19]], [[TRUNC7]](s32)
+    ; CHECK: [[OR10:%[0-9]+]]:_(s64) = G_OR [[LSHR2]], [[SHL11]]
+    ; CHECK: [[SHL12:%[0-9]+]]:_(s64) = G_SHL [[UV18]], [[SUB4]](s32)
+    ; CHECK: [[SELECT6:%[0-9]+]]:_(s64) = G_SELECT [[ICMP4]](s1), [[SHL10]], [[C5]]
+    ; CHECK: [[SELECT7:%[0-9]+]]:_(s64) = G_SELECT [[ICMP4]](s1), [[OR10]], [[SHL12]]
+    ; CHECK: [[SELECT8:%[0-9]+]]:_(s64) = G_SELECT [[ICMP5]](s1), [[UV19]], [[SELECT7]]
+    ; CHECK: [[UV20:%[0-9]+]]:_(s64), [[UV21:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[MV11]](s128)
+    ; CHECK: [[OR11:%[0-9]+]]:_(s64) = G_OR [[UV20]], [[SELECT6]]
+    ; CHECK: [[OR12:%[0-9]+]]:_(s64) = G_OR [[UV21]], [[SELECT8]]
+    ; CHECK: [[SUB6:%[0-9]+]]:_(s32) = G_SUB [[TRUNC6]], [[C3]]
+    ; CHECK: [[SUB7:%[0-9]+]]:_(s32) = G_SUB [[C3]], [[TRUNC6]]
+    ; CHECK: [[ICMP6:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[TRUNC6]](s32), [[C3]]
+    ; CHECK: [[ICMP7:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[TRUNC6]](s32), [[C1]]
+    ; CHECK: [[COPY16:%[0-9]+]]:_(s64) = COPY [[OR11]](s64)
+    ; CHECK: [[SHL13:%[0-9]+]]:_(s64) = G_SHL [[COPY16]], [[TRUNC6]](s32)
+    ; CHECK: [[COPY17:%[0-9]+]]:_(s64) = COPY [[OR11]](s64)
+    ; CHECK: [[AND3:%[0-9]+]]:_(s64) = G_AND [[COPY17]], [[C]]
+    ; CHECK: [[LSHR3:%[0-9]+]]:_(s64) = G_LSHR [[AND3]], [[SUB7]](s32)
+    ; CHECK: [[COPY18:%[0-9]+]]:_(s64) = COPY [[OR12]](s64)
+    ; CHECK: [[SHL14:%[0-9]+]]:_(s64) = G_SHL [[COPY18]], [[TRUNC6]](s32)
+    ; CHECK: [[COPY19:%[0-9]+]]:_(s64) = COPY [[LSHR3]](s64)
+    ; CHECK: [[COPY20:%[0-9]+]]:_(s64) = COPY [[SHL14]](s64)
+    ; CHECK: [[OR13:%[0-9]+]]:_(s64) = G_OR [[COPY19]], [[COPY20]]
+    ; CHECK: [[C9:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
+    ; CHECK: [[COPY21:%[0-9]+]]:_(s64) = COPY [[OR11]](s64)
+    ; CHECK: [[SHL15:%[0-9]+]]:_(s64) = G_SHL [[COPY21]], [[SUB6]](s32)
+    ; CHECK: [[COPY22:%[0-9]+]]:_(s64) = COPY [[SHL13]](s64)
+    ; CHECK: [[COPY23:%[0-9]+]]:_(s64) = COPY [[C9]](s64)
+    ; CHECK: [[SELECT9:%[0-9]+]]:_(s64) = G_SELECT [[ICMP6]](s1), [[COPY22]], [[COPY23]]
+    ; CHECK: [[TRUNC8:%[0-9]+]]:_(s48) = G_TRUNC [[SELECT9]](s64)
+    ; CHECK: [[COPY24:%[0-9]+]]:_(s64) = COPY [[OR13]](s64)
+    ; CHECK: [[COPY25:%[0-9]+]]:_(s64) = COPY [[SHL15]](s64)
+    ; CHECK: [[SELECT10:%[0-9]+]]:_(s64) = G_SELECT [[ICMP6]](s1), [[COPY24]], [[COPY25]]
+    ; CHECK: [[COPY26:%[0-9]+]]:_(s64) = COPY [[OR12]](s64)
+    ; CHECK: [[COPY27:%[0-9]+]]:_(s64) = COPY [[SELECT10]](s64)
+    ; CHECK: [[SELECT11:%[0-9]+]]:_(s64) = G_SELECT [[ICMP7]](s1), [[COPY26]], [[COPY27]]
+    ; CHECK: [[TRUNC9:%[0-9]+]]:_(s48) = G_TRUNC [[SELECT11]](s64)
+    ; CHECK: [[UV22:%[0-9]+]]:_(s16), [[UV23:%[0-9]+]]:_(s16), [[UV24:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[TRUNC8]](s48)
+    ; CHECK: [[UV25:%[0-9]+]]:_(s16), [[UV26:%[0-9]+]]:_(s16), [[UV27:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[TRUNC9]](s48)
+    ; CHECK: [[ZEXT6:%[0-9]+]]:_(s32) = G_ZEXT [[UV22]](s16)
+    ; CHECK: [[ZEXT7:%[0-9]+]]:_(s32) = G_ZEXT [[UV23]](s16)
+    ; CHECK: [[SHL16:%[0-9]+]]:_(s32) = G_SHL [[ZEXT7]], [[C8]](s32)
+    ; CHECK: [[OR14:%[0-9]+]]:_(s32) = G_OR [[ZEXT6]], [[SHL16]]
+    ; CHECK: [[ZEXT8:%[0-9]+]]:_(s32) = G_ZEXT [[UV24]](s16)
+    ; CHECK: [[ZEXT9:%[0-9]+]]:_(s32) = G_ZEXT [[UV25]](s16)
+    ; CHECK: [[SHL17:%[0-9]+]]:_(s32) = G_SHL [[ZEXT9]], [[C8]](s32)
+    ; CHECK: [[OR15:%[0-9]+]]:_(s32) = G_OR [[ZEXT8]], [[SHL17]]
+    ; CHECK: [[MV13:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR14]](s32), [[OR15]](s32)
+    ; CHECK: [[ZEXT10:%[0-9]+]]:_(s32) = G_ZEXT [[UV26]](s16)
+    ; CHECK: [[ZEXT11:%[0-9]+]]:_(s32) = G_ZEXT [[UV27]](s16)
+    ; CHECK: [[SHL18:%[0-9]+]]:_(s32) = G_SHL [[ZEXT11]], [[C8]](s32)
+    ; CHECK: [[OR16:%[0-9]+]]:_(s32) = G_OR [[ZEXT10]], [[SHL18]]
+    ; CHECK: [[COPY28:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
+    ; CHECK: [[COPY29:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
+    ; CHECK: [[SHL19:%[0-9]+]]:_(s32) = G_SHL [[COPY29]], [[C8]](s32)
+    ; CHECK: [[OR17:%[0-9]+]]:_(s32) = G_OR [[COPY28]], [[SHL19]]
+    ; CHECK: [[MV14:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR16]](s32), [[OR17]](s32)
+    ; CHECK: [[MV15:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[MV13]](s64), [[MV14]](s64)
+    ; CHECK: [[TRUNC10:%[0-9]+]]:_(s96) = G_TRUNC [[MV15]](s128)
+    ; CHECK: [[EXTRACT8:%[0-9]+]]:_(s64) = G_EXTRACT [[INSERT7]](s96), 0
+    ; CHECK: [[EXTRACT9:%[0-9]+]]:_(s32) = G_EXTRACT [[INSERT7]](s96), 64
+    ; CHECK: [[EXTRACT10:%[0-9]+]]:_(s64) = G_EXTRACT [[TRUNC10]](s96), 0
+    ; CHECK: [[COPY30:%[0-9]+]]:_(s64) = COPY [[SELECT11]](s64)
+    ; CHECK: [[EXTRACT11:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY30]](s64), 16
+    ; CHECK: [[OR18:%[0-9]+]]:_(s64) = G_OR [[EXTRACT8]], [[EXTRACT10]]
+    ; CHECK: [[OR19:%[0-9]+]]:_(s32) = G_OR [[EXTRACT9]], [[EXTRACT11]]
+    ; CHECK: [[DEF6:%[0-9]+]]:_(s96) = G_IMPLICIT_DEF
+    ; CHECK: [[INSERT10:%[0-9]+]]:_(s96) = G_INSERT [[DEF6]], [[OR18]](s64), 0
+    ; CHECK: [[INSERT11:%[0-9]+]]:_(s96) = G_INSERT [[INSERT10]], [[OR19]](s32), 64
+    ; CHECK: [[C10:%[0-9]+]]:_(s64) = G_CONSTANT i64 24
+    ; CHECK: [[DEF7:%[0-9]+]]:_(s96) = G_IMPLICIT_DEF
+    ; CHECK: [[INSERT12:%[0-9]+]]:_(s96) = G_INSERT [[DEF7]], [[C10]](s64), 0
+    ; CHECK: [[INSERT13:%[0-9]+]]:_(s96) = G_INSERT [[INSERT12]], [[C1]](s32), 64
+    ; CHECK: [[TRUNC11:%[0-9]+]]:_(s32) = G_TRUNC [[INSERT13]](s96)
+    ; CHECK: [[UV28:%[0-9]+]]:_(s32), [[UV29:%[0-9]+]]:_(s32), [[UV30:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[INSERT11]](s96)
+    ; CHECK: [[MV16:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV28]](s32), [[UV29]](s32)
+    ; CHECK: [[MV17:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV30]](s32), [[C1]](s32)
+    ; CHECK: [[MV18:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[MV16]](s64), [[MV17]](s64)
+    ; CHECK: [[MV19:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[C4]](s64), [[C5]](s64)
+    ; CHECK: [[TRUNC12:%[0-9]+]]:_(s32) = G_TRUNC [[MV19]](s128)
+    ; CHECK: [[UV31:%[0-9]+]]:_(s64), [[UV32:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[MV18]](s128)
+    ; CHECK: [[SUB8:%[0-9]+]]:_(s32) = G_SUB [[TRUNC12]], [[C6]]
+    ; CHECK: [[SUB9:%[0-9]+]]:_(s32) = G_SUB [[C6]], [[TRUNC12]]
+    ; CHECK: [[ICMP8:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[TRUNC12]](s32), [[C6]]
+    ; CHECK: [[ICMP9:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[TRUNC12]](s32), [[C1]]
+    ; CHECK: [[SHL20:%[0-9]+]]:_(s64) = G_SHL [[UV31]], [[TRUNC12]](s32)
+    ; CHECK: [[LSHR4:%[0-9]+]]:_(s64) = G_LSHR [[UV31]], [[SUB9]](s32)
+    ; CHECK: [[SHL21:%[0-9]+]]:_(s64) = G_SHL [[UV32]], [[TRUNC12]](s32)
+    ; CHECK: [[OR20:%[0-9]+]]:_(s64) = G_OR [[LSHR4]], [[SHL21]]
+    ; CHECK: [[SHL22:%[0-9]+]]:_(s64) = G_SHL [[UV31]], [[SUB8]](s32)
+    ; CHECK: [[SELECT12:%[0-9]+]]:_(s64) = G_SELECT [[ICMP8]](s1), [[SHL20]], [[C5]]
+    ; CHECK: [[SELECT13:%[0-9]+]]:_(s64) = G_SELECT [[ICMP8]](s1), [[OR20]], [[SHL22]]
+    ; CHECK: [[SELECT14:%[0-9]+]]:_(s64) = G_SELECT [[ICMP9]](s1), [[UV32]], [[SELECT13]]
+    ; CHECK: [[UV33:%[0-9]+]]:_(s64), [[UV34:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[MV18]](s128)
+    ; CHECK: [[OR21:%[0-9]+]]:_(s64) = G_OR [[UV33]], [[SELECT12]]
+    ; CHECK: [[OR22:%[0-9]+]]:_(s64) = G_OR [[UV34]], [[SELECT14]]
+    ; CHECK: [[SUB10:%[0-9]+]]:_(s32) = G_SUB [[TRUNC11]], [[C3]]
+    ; CHECK: [[SUB11:%[0-9]+]]:_(s32) = G_SUB [[C3]], [[TRUNC11]]
+    ; CHECK: [[ICMP10:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[TRUNC11]](s32), [[C3]]
+    ; CHECK: [[ICMP11:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[TRUNC11]](s32), [[C1]]
+    ; CHECK: [[COPY31:%[0-9]+]]:_(s64) = COPY [[OR21]](s64)
+    ; CHECK: [[SHL23:%[0-9]+]]:_(s64) = G_SHL [[COPY31]], [[TRUNC11]](s32)
+    ; CHECK: [[COPY32:%[0-9]+]]:_(s64) = COPY [[OR21]](s64)
+    ; CHECK: [[AND4:%[0-9]+]]:_(s64) = G_AND [[COPY32]], [[C]]
+    ; CHECK: [[LSHR5:%[0-9]+]]:_(s64) = G_LSHR [[AND4]], [[SUB11]](s32)
+    ; CHECK: [[COPY33:%[0-9]+]]:_(s64) = COPY [[OR22]](s64)
+    ; CHECK: [[SHL24:%[0-9]+]]:_(s64) = G_SHL [[COPY33]], [[TRUNC11]](s32)
+    ; CHECK: [[COPY34:%[0-9]+]]:_(s64) = COPY [[LSHR5]](s64)
+    ; CHECK: [[COPY35:%[0-9]+]]:_(s64) = COPY [[SHL24]](s64)
+    ; CHECK: [[OR23:%[0-9]+]]:_(s64) = G_OR [[COPY34]], [[COPY35]]
+    ; CHECK: [[C11:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
+    ; CHECK: [[COPY36:%[0-9]+]]:_(s64) = COPY [[OR21]](s64)
+    ; CHECK: [[SHL25:%[0-9]+]]:_(s64) = G_SHL [[COPY36]], [[SUB10]](s32)
+    ; CHECK: [[COPY37:%[0-9]+]]:_(s64) = COPY [[SHL23]](s64)
+    ; CHECK: [[COPY38:%[0-9]+]]:_(s64) = COPY [[C11]](s64)
+    ; CHECK: [[SELECT15:%[0-9]+]]:_(s64) = G_SELECT [[ICMP10]](s1), [[COPY37]], [[COPY38]]
+    ; CHECK: [[TRUNC13:%[0-9]+]]:_(s48) = G_TRUNC [[SELECT15]](s64)
+    ; CHECK: [[COPY39:%[0-9]+]]:_(s64) = COPY [[OR23]](s64)
+    ; CHECK: [[COPY40:%[0-9]+]]:_(s64) = COPY [[SHL25]](s64)
+    ; CHECK: [[SELECT16:%[0-9]+]]:_(s64) = G_SELECT [[ICMP10]](s1), [[COPY39]], [[COPY40]]
+    ; CHECK: [[COPY41:%[0-9]+]]:_(s64) = COPY [[OR22]](s64)
+    ; CHECK: [[COPY42:%[0-9]+]]:_(s64) = COPY [[SELECT16]](s64)
+    ; CHECK: [[SELECT17:%[0-9]+]]:_(s64) = G_SELECT [[ICMP11]](s1), [[COPY41]], [[COPY42]]
+    ; CHECK: [[TRUNC14:%[0-9]+]]:_(s48) = G_TRUNC [[SELECT17]](s64)
+    ; CHECK: [[UV35:%[0-9]+]]:_(s16), [[UV36:%[0-9]+]]:_(s16), [[UV37:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[TRUNC13]](s48)
+    ; CHECK: [[UV38:%[0-9]+]]:_(s16), [[UV39:%[0-9]+]]:_(s16), [[UV40:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[TRUNC14]](s48)
+    ; CHECK: [[ZEXT12:%[0-9]+]]:_(s32) = G_ZEXT [[UV35]](s16)
+    ; CHECK: [[ZEXT13:%[0-9]+]]:_(s32) = G_ZEXT [[UV36]](s16)
+    ; CHECK: [[SHL26:%[0-9]+]]:_(s32) = G_SHL [[ZEXT13]], [[C8]](s32)
+    ; CHECK: [[OR24:%[0-9]+]]:_(s32) = G_OR [[ZEXT12]], [[SHL26]]
+    ; CHECK: [[ZEXT14:%[0-9]+]]:_(s32) = G_ZEXT [[UV37]](s16)
+    ; CHECK: [[ZEXT15:%[0-9]+]]:_(s32) = G_ZEXT [[UV38]](s16)
+    ; CHECK: [[SHL27:%[0-9]+]]:_(s32) = G_SHL [[ZEXT15]], [[C8]](s32)
+    ; CHECK: [[OR25:%[0-9]+]]:_(s32) = G_OR [[ZEXT14]], [[SHL27]]
+    ; CHECK: [[MV20:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR24]](s32), [[OR25]](s32)
+    ; CHECK: [[ZEXT16:%[0-9]+]]:_(s32) = G_ZEXT [[UV39]](s16)
+    ; CHECK: [[ZEXT17:%[0-9]+]]:_(s32) = G_ZEXT [[UV40]](s16)
+    ; CHECK: [[SHL28:%[0-9]+]]:_(s32) = G_SHL [[ZEXT17]], [[C8]](s32)
+    ; CHECK: [[OR26:%[0-9]+]]:_(s32) = G_OR [[ZEXT16]], [[SHL28]]
+    ; CHECK: [[COPY43:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
+    ; CHECK: [[COPY44:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
+    ; CHECK: [[SHL29:%[0-9]+]]:_(s32) = G_SHL [[COPY44]], [[C8]](s32)
+    ; CHECK: [[OR27:%[0-9]+]]:_(s32) = G_OR [[COPY43]], [[SHL29]]
+    ; CHECK: [[MV21:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR26]](s32), [[OR27]](s32)
+    ; CHECK: [[MV22:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[MV20]](s64), [[MV21]](s64)
+    ; CHECK: [[TRUNC15:%[0-9]+]]:_(s96) = G_TRUNC [[MV22]](s128)
+    ; CHECK: [[EXTRACT12:%[0-9]+]]:_(s64) = G_EXTRACT [[INSERT11]](s96), 0
+    ; CHECK: [[EXTRACT13:%[0-9]+]]:_(s32) = G_EXTRACT [[INSERT11]](s96), 64
+    ; CHECK: [[EXTRACT14:%[0-9]+]]:_(s64) = G_EXTRACT [[TRUNC15]](s96), 0
+    ; CHECK: [[COPY45:%[0-9]+]]:_(s64) = COPY [[SELECT17]](s64)
+    ; CHECK: [[EXTRACT15:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY45]](s64), 16
+    ; CHECK: [[OR28:%[0-9]+]]:_(s64) = G_OR [[EXTRACT12]], [[EXTRACT14]]
+    ; CHECK: [[OR29:%[0-9]+]]:_(s32) = G_OR [[EXTRACT13]], [[EXTRACT15]]
+    ; CHECK: [[DEF8:%[0-9]+]]:_(s96) = G_IMPLICIT_DEF
+    ; CHECK: [[INSERT14:%[0-9]+]]:_(s96) = G_INSERT [[DEF8]], [[OR28]](s64), 0
+    ; CHECK: [[INSERT15:%[0-9]+]]:_(s96) = G_INSERT [[INSERT14]], [[OR29]](s32), 64
+    ; CHECK: [[C12:%[0-9]+]]:_(s64) = G_CONSTANT i64 32
+    ; CHECK: [[DEF9:%[0-9]+]]:_(s96) = G_IMPLICIT_DEF
+    ; CHECK: [[INSERT16:%[0-9]+]]:_(s96) = G_INSERT [[DEF9]], [[C12]](s64), 0
+    ; CHECK: [[INSERT17:%[0-9]+]]:_(s96) = G_INSERT [[INSERT16]], [[C1]](s32), 64
+    ; CHECK: [[TRUNC16:%[0-9]+]]:_(s32) = G_TRUNC [[INSERT17]](s96)
+    ; CHECK: [[UV41:%[0-9]+]]:_(s32), [[UV42:%[0-9]+]]:_(s32), [[UV43:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[INSERT15]](s96)
+    ; CHECK: [[MV23:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV41]](s32), [[UV42]](s32)
+    ; CHECK: [[MV24:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV43]](s32), [[C1]](s32)
+    ; CHECK: [[MV25:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[MV23]](s64), [[MV24]](s64)
+    ; CHECK: [[MV26:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[C4]](s64), [[C5]](s64)
+    ; CHECK: [[TRUNC17:%[0-9]+]]:_(s32) = G_TRUNC [[MV26]](s128)
+    ; CHECK: [[UV44:%[0-9]+]]:_(s64), [[UV45:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[MV25]](s128)
+    ; CHECK: [[SUB12:%[0-9]+]]:_(s32) = G_SUB [[TRUNC17]], [[C6]]
+    ; CHECK: [[SUB13:%[0-9]+]]:_(s32) = G_SUB [[C6]], [[TRUNC17]]
+    ; CHECK: [[ICMP12:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[TRUNC17]](s32), [[C6]]
+    ; CHECK: [[ICMP13:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[TRUNC17]](s32), [[C1]]
+    ; CHECK: [[SHL30:%[0-9]+]]:_(s64) = G_SHL [[UV44]], [[TRUNC17]](s32)
+    ; CHECK: [[LSHR6:%[0-9]+]]:_(s64) = G_LSHR [[UV44]], [[SUB13]](s32)
+    ; CHECK: [[SHL31:%[0-9]+]]:_(s64) = G_SHL [[UV45]], [[TRUNC17]](s32)
+    ; CHECK: [[OR30:%[0-9]+]]:_(s64) = G_OR [[LSHR6]], [[SHL31]]
+    ; CHECK: [[SHL32:%[0-9]+]]:_(s64) = G_SHL [[UV44]], [[SUB12]](s32)
+    ; CHECK: [[SELECT18:%[0-9]+]]:_(s64) = G_SELECT [[ICMP12]](s1), [[SHL30]], [[C5]]
+    ; CHECK: [[SELECT19:%[0-9]+]]:_(s64) = G_SELECT [[ICMP12]](s1), [[OR30]], [[SHL32]]
+    ; CHECK: [[SELECT20:%[0-9]+]]:_(s64) = G_SELECT [[ICMP13]](s1), [[UV45]], [[SELECT19]]
+    ; CHECK: [[UV46:%[0-9]+]]:_(s64), [[UV47:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[MV25]](s128)
+    ; CHECK: [[OR31:%[0-9]+]]:_(s64) = G_OR [[UV46]], [[SELECT18]]
+    ; CHECK: [[OR32:%[0-9]+]]:_(s64) = G_OR [[UV47]], [[SELECT20]]
+    ; CHECK: [[SUB14:%[0-9]+]]:_(s32) = G_SUB [[TRUNC16]], [[C3]]
+    ; CHECK: [[SUB15:%[0-9]+]]:_(s32) = G_SUB [[C3]], [[TRUNC16]]
+    ; CHECK: [[ICMP14:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[TRUNC16]](s32), [[C3]]
+    ; CHECK: [[ICMP15:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[TRUNC16]](s32), [[C1]]
+    ; CHECK: [[COPY46:%[0-9]+]]:_(s64) = COPY [[OR31]](s64)
+    ; CHECK: [[SHL33:%[0-9]+]]:_(s64) = G_SHL [[COPY46]], [[TRUNC16]](s32)
+    ; CHECK: [[COPY47:%[0-9]+]]:_(s64) = COPY [[OR31]](s64)
+    ; CHECK: [[AND5:%[0-9]+]]:_(s64) = G_AND [[COPY47]], [[C]]
+    ; CHECK: [[LSHR7:%[0-9]+]]:_(s64) = G_LSHR [[AND5]], [[SUB15]](s32)
+    ; CHECK: [[COPY48:%[0-9]+]]:_(s64) = COPY [[OR32]](s64)
+    ; CHECK: [[SHL34:%[0-9]+]]:_(s64) = G_SHL [[COPY48]], [[TRUNC16]](s32)
+    ; CHECK: [[COPY49:%[0-9]+]]:_(s64) = COPY [[LSHR7]](s64)
+    ; CHECK: [[COPY50:%[0-9]+]]:_(s64) = COPY [[SHL34]](s64)
+    ; CHECK: [[OR33:%[0-9]+]]:_(s64) = G_OR [[COPY49]], [[COPY50]]
+    ; CHECK: [[C13:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
+    ; CHECK: [[COPY51:%[0-9]+]]:_(s64) = COPY [[OR31]](s64)
+    ; CHECK: [[SHL35:%[0-9]+]]:_(s64) = G_SHL [[COPY51]], [[SUB14]](s32)
+    ; CHECK: [[COPY52:%[0-9]+]]:_(s64) = COPY [[SHL33]](s64)
+    ; CHECK: [[COPY53:%[0-9]+]]:_(s64) = COPY [[C13]](s64)
+    ; CHECK: [[SELECT21:%[0-9]+]]:_(s64) = G_SELECT [[ICMP14]](s1), [[COPY52]], [[COPY53]]
+    ; CHECK: [[TRUNC18:%[0-9]+]]:_(s48) = G_TRUNC [[SELECT21]](s64)
+    ; CHECK: [[COPY54:%[0-9]+]]:_(s64) = COPY [[OR33]](s64)
+    ; CHECK: [[COPY55:%[0-9]+]]:_(s64) = COPY [[SHL35]](s64)
+    ; CHECK: [[SELECT22:%[0-9]+]]:_(s64) = G_SELECT [[ICMP14]](s1), [[COPY54]], [[COPY55]]
+    ; CHECK: [[COPY56:%[0-9]+]]:_(s64) = COPY [[OR32]](s64)
+    ; CHECK: [[COPY57:%[0-9]+]]:_(s64) = COPY [[SELECT22]](s64)
+    ; CHECK: [[SELECT23:%[0-9]+]]:_(s64) = G_SELECT [[ICMP15]](s1), [[COPY56]], [[COPY57]]
+    ; CHECK: [[TRUNC19:%[0-9]+]]:_(s48) = G_TRUNC [[SELECT23]](s64)
+    ; CHECK: [[UV48:%[0-9]+]]:_(s16), [[UV49:%[0-9]+]]:_(s16), [[UV50:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[TRUNC18]](s48)
+    ; CHECK: [[UV51:%[0-9]+]]:_(s16), [[UV52:%[0-9]+]]:_(s16), [[UV53:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[TRUNC19]](s48)
+    ; CHECK: [[ZEXT18:%[0-9]+]]:_(s32) = G_ZEXT [[UV48]](s16)
+    ; CHECK: [[ZEXT19:%[0-9]+]]:_(s32) = G_ZEXT [[UV49]](s16)
+    ; CHECK: [[SHL36:%[0-9]+]]:_(s32) = G_SHL [[ZEXT19]], [[C8]](s32)
+    ; CHECK: [[OR34:%[0-9]+]]:_(s32) = G_OR [[ZEXT18]], [[SHL36]]
+    ; CHECK: [[ZEXT20:%[0-9]+]]:_(s32) = G_ZEXT [[UV50]](s16)
+    ; CHECK: [[ZEXT21:%[0-9]+]]:_(s32) = G_ZEXT [[UV51]](s16)
+    ; CHECK: [[SHL37:%[0-9]+]]:_(s32) = G_SHL [[ZEXT21]], [[C8]](s32)
+    ; CHECK: [[OR35:%[0-9]+]]:_(s32) = G_OR [[ZEXT20]], [[SHL37]]
+    ; CHECK: [[MV27:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR34]](s32), [[OR35]](s32)
+    ; CHECK: [[ZEXT22:%[0-9]+]]:_(s32) = G_ZEXT [[UV52]](s16)
+    ; CHECK: [[ZEXT23:%[0-9]+]]:_(s32) = G_ZEXT [[UV53]](s16)
+    ; CHECK: [[SHL38:%[0-9]+]]:_(s32) = G_SHL [[ZEXT23]], [[C8]](s32)
+    ; CHECK: [[OR36:%[0-9]+]]:_(s32) = G_OR [[ZEXT22]], [[SHL38]]
+    ; CHECK: [[COPY58:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
+    ; CHECK: [[COPY59:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
+    ; CHECK: [[SHL39:%[0-9]+]]:_(s32) = G_SHL [[COPY59]], [[C8]](s32)
+    ; CHECK: [[OR37:%[0-9]+]]:_(s32) = G_OR [[COPY58]], [[SHL39]]
+    ; CHECK: [[MV28:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR36]](s32), [[OR37]](s32)
+    ; CHECK: [[MV29:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[MV27]](s64), [[MV28]](s64)
+    ; CHECK: [[TRUNC20:%[0-9]+]]:_(s96) = G_TRUNC [[MV29]](s128)
+    ; CHECK: [[EXTRACT16:%[0-9]+]]:_(s64) = G_EXTRACT [[INSERT15]](s96), 0
+    ; CHECK: [[EXTRACT17:%[0-9]+]]:_(s32) = G_EXTRACT [[INSERT15]](s96), 64
+    ; CHECK: [[EXTRACT18:%[0-9]+]]:_(s64) = G_EXTRACT [[TRUNC20]](s96), 0
+    ; CHECK: [[COPY60:%[0-9]+]]:_(s64) = COPY [[SELECT23]](s64)
+    ; CHECK: [[EXTRACT19:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY60]](s64), 16
+    ; CHECK: [[OR38:%[0-9]+]]:_(s64) = G_OR [[EXTRACT16]], [[EXTRACT18]]
+    ; CHECK: [[OR39:%[0-9]+]]:_(s32) = G_OR [[EXTRACT17]], [[EXTRACT19]]
+    ; CHECK: [[DEF10:%[0-9]+]]:_(s96) = G_IMPLICIT_DEF
+    ; CHECK: [[INSERT18:%[0-9]+]]:_(s96) = G_INSERT [[DEF10]], [[OR38]](s64), 0
+    ; CHECK: [[INSERT19:%[0-9]+]]:_(s96) = G_INSERT [[INSERT18]], [[OR39]](s32), 64
+    ; CHECK: [[C14:%[0-9]+]]:_(s64) = G_CONSTANT i64 40
+    ; CHECK: [[DEF11:%[0-9]+]]:_(s96) = G_IMPLICIT_DEF
+    ; CHECK: [[INSERT20:%[0-9]+]]:_(s96) = G_INSERT [[DEF11]], [[C14]](s64), 0
+    ; CHECK: [[INSERT21:%[0-9]+]]:_(s96) = G_INSERT [[INSERT20]], [[C1]](s32), 64
+    ; CHECK: [[TRUNC21:%[0-9]+]]:_(s32) = G_TRUNC [[INSERT21]](s96)
+    ; CHECK: [[UV54:%[0-9]+]]:_(s32), [[UV55:%[0-9]+]]:_(s32), [[UV56:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[INSERT19]](s96)
+    ; CHECK: [[MV30:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV54]](s32), [[UV55]](s32)
+    ; CHECK: [[MV31:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV56]](s32), [[C1]](s32)
+    ; CHECK: [[MV32:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[MV30]](s64), [[MV31]](s64)
+    ; CHECK: [[MV33:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[C4]](s64), [[C5]](s64)
+    ; CHECK: [[TRUNC22:%[0-9]+]]:_(s32) = G_TRUNC [[MV33]](s128)
+    ; CHECK: [[UV57:%[0-9]+]]:_(s64), [[UV58:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[MV32]](s128)
+    ; CHECK: [[SUB16:%[0-9]+]]:_(s32) = G_SUB [[TRUNC22]], [[C6]]
+    ; CHECK: [[SUB17:%[0-9]+]]:_(s32) = G_SUB [[C6]], [[TRUNC22]]
+    ; CHECK: [[ICMP16:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[TRUNC22]](s32), [[C6]]
+    ; CHECK: [[ICMP17:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[TRUNC22]](s32), [[C1]]
+    ; CHECK: [[SHL40:%[0-9]+]]:_(s64) = G_SHL [[UV57]], [[TRUNC22]](s32)
+    ; CHECK: [[LSHR8:%[0-9]+]]:_(s64) = G_LSHR [[UV57]], [[SUB17]](s32)
+    ; CHECK: [[SHL41:%[0-9]+]]:_(s64) = G_SHL [[UV58]], [[TRUNC22]](s32)
+    ; CHECK: [[OR40:%[0-9]+]]:_(s64) = G_OR [[LSHR8]], [[SHL41]]
+    ; CHECK: [[SHL42:%[0-9]+]]:_(s64) = G_SHL [[UV57]], [[SUB16]](s32)
+    ; CHECK: [[SELECT24:%[0-9]+]]:_(s64) = G_SELECT [[ICMP16]](s1), [[SHL40]], [[C5]]
+    ; CHECK: [[SELECT25:%[0-9]+]]:_(s64) = G_SELECT [[ICMP16]](s1), [[OR40]], [[SHL42]]
+    ; CHECK: [[SELECT26:%[0-9]+]]:_(s64) = G_SELECT [[ICMP17]](s1), [[UV58]], [[SELECT25]]
+    ; CHECK: [[UV59:%[0-9]+]]:_(s64), [[UV60:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[MV32]](s128)
+    ; CHECK: [[OR41:%[0-9]+]]:_(s64) = G_OR [[UV59]], [[SELECT24]]
+    ; CHECK: [[OR42:%[0-9]+]]:_(s64) = G_OR [[UV60]], [[SELECT26]]
+    ; CHECK: [[SUB18:%[0-9]+]]:_(s32) = G_SUB [[TRUNC21]], [[C3]]
+    ; CHECK: [[SUB19:%[0-9]+]]:_(s32) = G_SUB [[C3]], [[TRUNC21]]
+    ; CHECK: [[ICMP18:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[TRUNC21]](s32), [[C3]]
+    ; CHECK: [[ICMP19:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[TRUNC21]](s32), [[C1]]
+    ; CHECK: [[COPY61:%[0-9]+]]:_(s64) = COPY [[OR41]](s64)
+    ; CHECK: [[SHL43:%[0-9]+]]:_(s64) = G_SHL [[COPY61]], [[TRUNC21]](s32)
+    ; CHECK: [[COPY62:%[0-9]+]]:_(s64) = COPY [[OR41]](s64)
+    ; CHECK: [[AND6:%[0-9]+]]:_(s64) = G_AND [[COPY62]], [[C]]
+    ; CHECK: [[LSHR9:%[0-9]+]]:_(s64) = G_LSHR [[AND6]], [[SUB19]](s32)
+    ; CHECK: [[COPY63:%[0-9]+]]:_(s64) = COPY [[OR42]](s64)
+    ; CHECK: [[SHL44:%[0-9]+]]:_(s64) = G_SHL [[COPY63]], [[TRUNC21]](s32)
+    ; CHECK: [[COPY64:%[0-9]+]]:_(s64) = COPY [[LSHR9]](s64)
+    ; CHECK: [[COPY65:%[0-9]+]]:_(s64) = COPY [[SHL44]](s64)
+    ; CHECK: [[OR43:%[0-9]+]]:_(s64) = G_OR [[COPY64]], [[COPY65]]
+    ; CHECK: [[COPY66:%[0-9]+]]:_(s64) = COPY [[OR41]](s64)
+    ; CHECK: [[SHL45:%[0-9]+]]:_(s64) = G_SHL [[COPY66]], [[SUB18]](s32)
+    ; CHECK: [[COPY67:%[0-9]+]]:_(s64) = COPY [[SHL43]](s64)
+    ; CHECK: [[COPY68:%[0-9]+]]:_(s64) = COPY [[C5]](s64)
+    ; CHECK: [[SELECT27:%[0-9]+]]:_(s64) = G_SELECT [[ICMP18]](s1), [[COPY67]], [[COPY68]]
+    ; CHECK: [[TRUNC23:%[0-9]+]]:_(s48) = G_TRUNC [[SELECT27]](s64)
+    ; CHECK: [[COPY69:%[0-9]+]]:_(s64) = COPY [[OR43]](s64)
+    ; CHECK: [[COPY70:%[0-9]+]]:_(s64) = COPY [[SHL45]](s64)
+    ; CHECK: [[SELECT28:%[0-9]+]]:_(s64) = G_SELECT [[ICMP18]](s1), [[COPY69]], [[COPY70]]
+    ; CHECK: [[COPY71:%[0-9]+]]:_(s64) = COPY [[OR42]](s64)
+    ; CHECK: [[COPY72:%[0-9]+]]:_(s64) = COPY [[SELECT28]](s64)
+    ; CHECK: [[SELECT29:%[0-9]+]]:_(s64) = G_SELECT [[ICMP19]](s1), [[COPY71]], [[COPY72]]
+    ; CHECK: [[TRUNC24:%[0-9]+]]:_(s48) = G_TRUNC [[SELECT29]](s64)
+    ; CHECK: [[UV61:%[0-9]+]]:_(s16), [[UV62:%[0-9]+]]:_(s16), [[UV63:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[TRUNC23]](s48)
+    ; CHECK: [[UV64:%[0-9]+]]:_(s16), [[UV65:%[0-9]+]]:_(s16), [[UV66:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[TRUNC24]](s48)
+    ; CHECK: [[ZEXT24:%[0-9]+]]:_(s32) = G_ZEXT [[UV61]](s16)
+    ; CHECK: [[ZEXT25:%[0-9]+]]:_(s32) = G_ZEXT [[UV62]](s16)
+    ; CHECK: [[SHL46:%[0-9]+]]:_(s32) = G_SHL [[ZEXT25]], [[C8]](s32)
+    ; CHECK: [[OR44:%[0-9]+]]:_(s32) = G_OR [[ZEXT24]], [[SHL46]]
+    ; CHECK: [[ZEXT26:%[0-9]+]]:_(s32) = G_ZEXT [[UV63]](s16)
+    ; CHECK: [[ZEXT27:%[0-9]+]]:_(s32) = G_ZEXT [[UV64]](s16)
+    ; CHECK: [[SHL47:%[0-9]+]]:_(s32) = G_SHL [[ZEXT27]], [[C8]](s32)
+    ; CHECK: [[OR45:%[0-9]+]]:_(s32) = G_OR [[ZEXT26]], [[SHL47]]
+    ; CHECK: [[MV34:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR44]](s32), [[OR45]](s32)
+    ; CHECK: [[ZEXT28:%[0-9]+]]:_(s32) = G_ZEXT [[UV65]](s16)
+    ; CHECK: [[ZEXT29:%[0-9]+]]:_(s32) = G_ZEXT [[UV66]](s16)
+    ; CHECK: [[SHL48:%[0-9]+]]:_(s32) = G_SHL [[ZEXT29]], [[C8]](s32)
+    ; CHECK: [[OR46:%[0-9]+]]:_(s32) = G_OR [[ZEXT28]], [[SHL48]]
+    ; CHECK: [[COPY73:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
+    ; CHECK: [[COPY74:%[0-9]+]]:_(s32) = COPY [[C1]](s32)
+    ; CHECK: [[SHL49:%[0-9]+]]:_(s32) = G_SHL [[COPY74]], [[C8]](s32)
+    ; CHECK: [[OR47:%[0-9]+]]:_(s32) = G_OR [[COPY73]], [[SHL49]]
+    ; CHECK: [[MV35:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[OR46]](s32), [[OR47]](s32)
+    ; CHECK: [[MV36:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[MV34]](s64), [[MV35]](s64)
+    ; CHECK: [[TRUNC25:%[0-9]+]]:_(s96) = G_TRUNC [[MV36]](s128)
+    ; CHECK: [[EXTRACT20:%[0-9]+]]:_(s64) = G_EXTRACT [[INSERT19]](s96), 0
+    ; CHECK: [[EXTRACT21:%[0-9]+]]:_(s32) = G_EXTRACT [[INSERT19]](s96), 64
+    ; CHECK: [[EXTRACT22:%[0-9]+]]:_(s64) = G_EXTRACT [[TRUNC25]](s96), 0
+    ; CHECK: [[COPY75:%[0-9]+]]:_(s64) = COPY [[SELECT29]](s64)
+    ; CHECK: [[EXTRACT23:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY75]](s64), 16
+    ; CHECK: [[OR48:%[0-9]+]]:_(s64) = G_OR [[EXTRACT20]], [[EXTRACT22]]
+    ; CHECK: [[OR49:%[0-9]+]]:_(s32) = G_OR [[EXTRACT21]], [[EXTRACT23]]
+    ; CHECK: [[DEF12:%[0-9]+]]:_(s96) = G_IMPLICIT_DEF
+    ; CHECK: [[INSERT22:%[0-9]+]]:_(s96) = G_INSERT [[DEF12]], [[OR48]](s64), 0
+    ; CHECK: [[INSERT23:%[0-9]+]]:_(s96) = G_INSERT [[INSERT22]], [[OR49]](s32), 64
+    ; CHECK: [[UV67:%[0-9]+]]:_(s16), [[UV68:%[0-9]+]]:_(s16), [[UV69:%[0-9]+]]:_(s16), [[UV70:%[0-9]+]]:_(s16), [[UV71:%[0-9]+]]:_(s16), [[UV72:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[INSERT23]](s96)
+    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV67]](s16)
+    ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV68]](s16)
+    ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV69]](s16)
+    ; CHECK: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV70]](s16)
+    ; CHECK: [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[UV71]](s16)
+    ; CHECK: [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[UV72]](s16)
+    ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32)
+    ; CHECK: $vgpr1 = COPY [[ANYEXT1]](s32)
+    ; CHECK: $vgpr2 = COPY [[ANYEXT2]](s32)
+    ; CHECK: $vgpr3 = COPY [[ANYEXT3]](s32)
+    ; CHECK: $vgpr4 = COPY [[ANYEXT4]](s32)
+    ; CHECK: $vgpr5 = COPY [[ANYEXT5]](s32)
+    %0:_(s64) = COPY $vgpr0_vgpr1
+    %1:_(s48) = G_TRUNC %0
+    %2:_(s8), %3:_(s8), %4:_(s8), %5:_(s8), %6:_(s8), %7:_(s8) = G_UNMERGE_VALUES %1
+    %8:_(s32) = G_ANYEXT %2
+    %9:_(s32) = G_ANYEXT %3
+    %10:_(s32) = G_ANYEXT %4
+    %11:_(s32) = G_ANYEXT %5
+    %12:_(s32) = G_ANYEXT %6
+    %13:_(s32) = G_ANYEXT %7
+    $vgpr0 = COPY %8
+    $vgpr1 = COPY %9
+    $vgpr2 = COPY %10
+    $vgpr3 = COPY %11
+    $vgpr4 = COPY %12
+    $vgpr5 = COPY %13
+...
+
+---
+name: test_unmerge_s16_s48
+body: |
+  bb.0:
+    liveins: $vgpr0_vgpr1
+    ; CHECK-LABEL: name: test_unmerge_s16_s48
+    ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
+    ; CHECK: [[TRUNC:%[0-9]+]]:_(s48) = G_TRUNC [[COPY]](s64)
+    ; CHECK: [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16), [[UV2:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[TRUNC]](s48)
+    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s16)
+    ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s16)
+    ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s16)
+    ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32)
+    ; CHECK: $vgpr1 = COPY [[ANYEXT1]](s32)
+    ; CHECK: $vgpr2 = COPY [[ANYEXT2]](s32)
+    %0:_(s64) = COPY $vgpr0_vgpr1
+    %1:_(s48) = G_TRUNC %0
+    %2:_(s16), %3:_(s16), %4:_(s16) = G_UNMERGE_VALUES %1
+    %5:_(s32) = G_ANYEXT %2
+    %6:_(s32) = G_ANYEXT %3
+    %7:_(s32) = G_ANYEXT %4
+    $vgpr0 = COPY %5
+    $vgpr1 = COPY %6
+    $vgpr2 = COPY %7
+...
+
+---
+name: test_unmerge_s8_s64
+body: |
+  bb.0:
+    liveins: $vgpr0_vgpr1
+    ; CHECK-LABEL: name: test_unmerge_s8_s64
+    ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
+    ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
+    ; CHECK: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[COPY]](s64), [[C]](s64)
+    ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
+    ; CHECK: [[MV1:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[C1]](s64), [[C]](s64)
+    ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[MV1]](s128)
+    ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 64
+    ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[MV]](s128)
+    ; CHECK: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[TRUNC]], [[C2]]
+    ; CHECK: [[SUB1:%[0-9]+]]:_(s32) = G_SUB [[C2]], [[TRUNC]]
+    ; CHECK: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
+    ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[TRUNC]](s32), [[C2]]
+    ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[TRUNC]](s32), [[C3]]
+    ; CHECK: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[UV]], [[TRUNC]](s32)
+    ; CHECK: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[UV]], [[SUB1]](s32)
+    ; CHECK: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[UV1]], [[TRUNC]](s32)
+    ; CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR]], [[SHL1]]
+    ; CHECK: [[SHL2:%[0-9]+]]:_(s64) = G_SHL [[UV]], [[SUB]](s32)
+    ; CHECK: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s1), [[SHL]], [[C]]
+    ; CHECK: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s1), [[OR]], [[SHL2]]
+    ; CHECK: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[ICMP1]](s1), [[UV1]], [[SELECT1]]
+    ; CHECK: [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[MV]](s128)
+    ; CHECK: [[OR1:%[0-9]+]]:_(s64) = G_OR [[UV2]], [[SELECT]]
+    ; CHECK: [[OR2:%[0-9]+]]:_(s64) = G_OR [[UV3]], [[SELECT2]]
+    ; CHECK: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
+    ; CHECK: [[MV2:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[C4]](s64), [[C]](s64)
+    ; CHECK: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[MV2]](s128)
+    ; CHECK: [[SUB2:%[0-9]+]]:_(s32) = G_SUB [[TRUNC1]], [[C2]]
+    ; CHECK: [[SUB3:%[0-9]+]]:_(s32) = G_SUB [[C2]], [[TRUNC1]]
+    ; CHECK: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[TRUNC1]](s32), [[C2]]
+    ; CHECK: [[ICMP3:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[TRUNC1]](s32), [[C3]]
+    ; CHECK: [[SHL3:%[0-9]+]]:_(s64) = G_SHL [[OR1]], [[TRUNC1]](s32)
+    ; CHECK: [[LSHR1:%[0-9]+]]:_(s64) = G_LSHR [[OR1]], [[SUB3]](s32)
+    ; CHECK: [[SHL4:%[0-9]+]]:_(s64) = G_SHL [[OR2]], [[TRUNC1]](s32)
+    ; CHECK: [[OR3:%[0-9]+]]:_(s64) = G_OR [[LSHR1]], [[SHL4]]
+    ; CHECK: [[SHL5:%[0-9]+]]:_(s64) = G_SHL [[OR1]], [[SUB2]](s32)
+    ; CHECK: [[SELECT3:%[0-9]+]]:_(s64) = G_SELECT [[ICMP2]](s1), [[SHL3]], [[C]]
+    ; CHECK: [[SELECT4:%[0-9]+]]:_(s64) = G_SELECT [[ICMP2]](s1), [[OR3]], [[SHL5]]
+    ; CHECK: [[SELECT5:%[0-9]+]]:_(s64) = G_SELECT [[ICMP3]](s1), [[OR2]], [[SELECT4]]
+    ; CHECK: [[OR4:%[0-9]+]]:_(s64) = G_OR [[OR1]], [[SELECT3]]
+    ; CHECK: [[OR5:%[0-9]+]]:_(s64) = G_OR [[OR2]], [[SELECT5]]
+    ; CHECK: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 24
+    ; CHECK: [[MV3:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[C5]](s64), [[C]](s64)
+    ; CHECK: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[MV3]](s128)
+    ; CHECK: [[SUB4:%[0-9]+]]:_(s32) = G_SUB [[TRUNC2]], [[C2]]
+    ; CHECK: [[SUB5:%[0-9]+]]:_(s32) = G_SUB [[C2]], [[TRUNC2]]
+    ; CHECK: [[ICMP4:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[TRUNC2]](s32), [[C2]]
+    ; CHECK: [[ICMP5:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[TRUNC2]](s32), [[C3]]
+    ; CHECK: [[SHL6:%[0-9]+]]:_(s64) = G_SHL [[OR4]], [[TRUNC2]](s32)
+    ; CHECK: [[LSHR2:%[0-9]+]]:_(s64) = G_LSHR [[OR4]], [[SUB5]](s32)
+    ; CHECK: [[SHL7:%[0-9]+]]:_(s64) = G_SHL [[OR5]], [[TRUNC2]](s32)
+    ; CHECK: [[OR6:%[0-9]+]]:_(s64) = G_OR [[LSHR2]], [[SHL7]]
+    ; CHECK: [[SHL8:%[0-9]+]]:_(s64) = G_SHL [[OR4]], [[SUB4]](s32)
+    ; CHECK: [[SELECT6:%[0-9]+]]:_(s64) = G_SELECT [[ICMP4]](s1), [[SHL6]], [[C]]
+    ; CHECK: [[SELECT7:%[0-9]+]]:_(s64) = G_SELECT [[ICMP4]](s1), [[OR6]], [[SHL8]]
+    ; CHECK: [[SELECT8:%[0-9]+]]:_(s64) = G_SELECT [[ICMP5]](s1), [[OR5]], [[SELECT7]]
+    ; CHECK: [[OR7:%[0-9]+]]:_(s64) = G_OR [[OR4]], [[SELECT6]]
+    ; CHECK: [[OR8:%[0-9]+]]:_(s64) = G_OR [[OR5]], [[SELECT8]]
+    ; CHECK: [[C6:%[0-9]+]]:_(s64) = G_CONSTANT i64 32
+    ; CHECK: [[MV4:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[C6]](s64), [[C]](s64)
+    ; CHECK: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[MV4]](s128)
+    ; CHECK: [[SUB6:%[0-9]+]]:_(s32) = G_SUB [[TRUNC3]], [[C2]]
+    ; CHECK: [[SUB7:%[0-9]+]]:_(s32) = G_SUB [[C2]], [[TRUNC3]]
+    ; CHECK: [[ICMP6:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[TRUNC3]](s32), [[C2]]
+    ; CHECK: [[ICMP7:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[TRUNC3]](s32), [[C3]]
+    ; CHECK: [[SHL9:%[0-9]+]]:_(s64) = G_SHL [[OR7]], [[TRUNC3]](s32)
+    ; CHECK: [[LSHR3:%[0-9]+]]:_(s64) = G_LSHR [[OR7]], [[SUB7]](s32)
+    ; CHECK: [[SHL10:%[0-9]+]]:_(s64) = G_SHL [[OR8]], [[TRUNC3]](s32)
+    ; CHECK: [[OR9:%[0-9]+]]:_(s64) = G_OR [[LSHR3]], [[SHL10]]
+    ; CHECK: [[SHL11:%[0-9]+]]:_(s64) = G_SHL [[OR7]], [[SUB6]](s32)
+    ; CHECK: [[SELECT9:%[0-9]+]]:_(s64) = G_SELECT [[ICMP6]](s1), [[SHL9]], [[C]]
+    ; CHECK: [[SELECT10:%[0-9]+]]:_(s64) = G_SELECT [[ICMP6]](s1), [[OR9]], [[SHL11]]
+    ; CHECK: [[SELECT11:%[0-9]+]]:_(s64) = G_SELECT [[ICMP7]](s1), [[OR8]], [[SELECT10]]
+    ; CHECK: [[OR10:%[0-9]+]]:_(s64) = G_OR [[OR7]], [[SELECT9]]
+    ; CHECK: [[OR11:%[0-9]+]]:_(s64) = G_OR [[OR8]], [[SELECT11]]
+    ; CHECK: [[C7:%[0-9]+]]:_(s64) = G_CONSTANT i64 40
+    ; CHECK: [[MV5:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[C7]](s64), [[C]](s64)
+    ; CHECK: [[TRUNC4:%[0-9]+]]:_(s32) = G_TRUNC [[MV5]](s128)
+    ; CHECK: [[SUB8:%[0-9]+]]:_(s32) = G_SUB [[TRUNC4]], [[C2]]
+    ; CHECK: [[SUB9:%[0-9]+]]:_(s32) = G_SUB [[C2]], [[TRUNC4]]
+    ; CHECK: [[ICMP8:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[TRUNC4]](s32), [[C2]]
+    ; CHECK: [[ICMP9:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[TRUNC4]](s32), [[C3]]
+    ; CHECK: [[SHL12:%[0-9]+]]:_(s64) = G_SHL [[OR10]], [[TRUNC4]](s32)
+    ; CHECK: [[LSHR4:%[0-9]+]]:_(s64) = G_LSHR [[OR10]], [[SUB9]](s32)
+    ; CHECK: [[SHL13:%[0-9]+]]:_(s64) = G_SHL [[OR11]], [[TRUNC4]](s32)
+    ; CHECK: [[OR12:%[0-9]+]]:_(s64) = G_OR [[LSHR4]], [[SHL13]]
+    ; CHECK: [[SHL14:%[0-9]+]]:_(s64) = G_SHL [[OR10]], [[SUB8]](s32)
+    ; CHECK: [[SELECT12:%[0-9]+]]:_(s64) = G_SELECT [[ICMP8]](s1), [[SHL12]], [[C]]
+    ; CHECK: [[SELECT13:%[0-9]+]]:_(s64) = G_SELECT [[ICMP8]](s1), [[OR12]], [[SHL14]]
+    ; CHECK: [[SELECT14:%[0-9]+]]:_(s64) = G_SELECT [[ICMP9]](s1), [[OR11]], [[SELECT13]]
+    ; CHECK: [[OR13:%[0-9]+]]:_(s64) = G_OR [[OR10]], [[SELECT12]]
+    ; CHECK: [[OR14:%[0-9]+]]:_(s64) = G_OR [[OR11]], [[SELECT14]]
+    ; CHECK: [[C8:%[0-9]+]]:_(s64) = G_CONSTANT i64 48
+    ; CHECK: [[MV6:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[C8]](s64), [[C]](s64)
+    ; CHECK: [[TRUNC5:%[0-9]+]]:_(s32) = G_TRUNC [[MV6]](s128)
+    ; CHECK: [[SUB10:%[0-9]+]]:_(s32) = G_SUB [[TRUNC5]], [[C2]]
+    ; CHECK: [[SUB11:%[0-9]+]]:_(s32) = G_SUB [[C2]], [[TRUNC5]]
+    ; CHECK: [[ICMP10:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[TRUNC5]](s32), [[C2]]
+    ; CHECK: [[ICMP11:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[TRUNC5]](s32), [[C3]]
+    ; CHECK: [[SHL15:%[0-9]+]]:_(s64) = G_SHL [[OR13]], [[TRUNC5]](s32)
+    ; CHECK: [[LSHR5:%[0-9]+]]:_(s64) = G_LSHR [[OR13]], [[SUB11]](s32)
+    ; CHECK: [[SHL16:%[0-9]+]]:_(s64) = G_SHL [[OR14]], [[TRUNC5]](s32)
+    ; CHECK: [[OR15:%[0-9]+]]:_(s64) = G_OR [[LSHR5]], [[SHL16]]
+    ; CHECK: [[SHL17:%[0-9]+]]:_(s64) = G_SHL [[OR13]], [[SUB10]](s32)
+    ; CHECK: [[SELECT15:%[0-9]+]]:_(s64) = G_SELECT [[ICMP10]](s1), [[SHL15]], [[C]]
+    ; CHECK: [[SELECT16:%[0-9]+]]:_(s64) = G_SELECT [[ICMP10]](s1), [[OR15]], [[SHL17]]
+    ; CHECK: [[SELECT17:%[0-9]+]]:_(s64) = G_SELECT [[ICMP11]](s1), [[OR14]], [[SELECT16]]
+    ; CHECK: [[OR16:%[0-9]+]]:_(s64) = G_OR [[OR13]], [[SELECT15]]
+    ; CHECK: [[OR17:%[0-9]+]]:_(s64) = G_OR [[OR14]], [[SELECT17]]
+    ; CHECK: [[C9:%[0-9]+]]:_(s64) = G_CONSTANT i64 56
+    ; CHECK: [[MV7:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[C9]](s64), [[C]](s64)
+    ; CHECK: [[TRUNC6:%[0-9]+]]:_(s32) = G_TRUNC [[MV7]](s128)
+    ; CHECK: [[SUB12:%[0-9]+]]:_(s32) = G_SUB [[TRUNC6]], [[C2]]
+    ; CHECK: [[SUB13:%[0-9]+]]:_(s32) = G_SUB [[C2]], [[TRUNC6]]
+    ; CHECK: [[ICMP12:%[0-9]+]]:_(s1) = G_ICMP intpred(ult), [[TRUNC6]](s32), [[C2]]
+    ; CHECK: [[ICMP13:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[TRUNC6]](s32), [[C3]]
+    ; CHECK: [[SHL18:%[0-9]+]]:_(s64) = G_SHL [[OR16]], [[TRUNC6]](s32)
+    ; CHECK: [[LSHR6:%[0-9]+]]:_(s64) = G_LSHR [[OR16]], [[SUB13]](s32)
+    ; CHECK: [[SHL19:%[0-9]+]]:_(s64) = G_SHL [[OR17]], [[TRUNC6]](s32)
+    ; CHECK: [[OR18:%[0-9]+]]:_(s64) = G_OR [[LSHR6]], [[SHL19]]
+    ; CHECK: [[SHL20:%[0-9]+]]:_(s64) = G_SHL [[OR16]], [[SUB12]](s32)
+    ; CHECK: [[SELECT18:%[0-9]+]]:_(s64) = G_SELECT [[ICMP12]](s1), [[SHL18]], [[C]]
+    ; CHECK: [[SELECT19:%[0-9]+]]:_(s64) = G_SELECT [[ICMP12]](s1), [[OR18]], [[SHL20]]
+    ; CHECK: [[SELECT20:%[0-9]+]]:_(s64) = G_SELECT [[ICMP13]](s1), [[OR17]], [[SELECT19]]
+    ; CHECK: [[OR19:%[0-9]+]]:_(s64) = G_OR [[OR16]], [[SELECT18]]
+    ; CHECK: [[OR20:%[0-9]+]]:_(s64) = G_OR [[OR17]], [[SELECT20]]
+    ; CHECK: [[UV4:%[0-9]+]]:_(s16), [[UV5:%[0-9]+]]:_(s16), [[UV6:%[0-9]+]]:_(s16), [[UV7:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[OR19]](s64)
+    ; CHECK: [[UV8:%[0-9]+]]:_(s16), [[UV9:%[0-9]+]]:_(s16), [[UV10:%[0-9]+]]:_(s16), [[UV11:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[OR20]](s64)
+    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s16)
+    ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s16)
+    ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV6]](s16)
+    ; CHECK: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV7]](s16)
+    ; CHECK: [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[UV8]](s16)
+    ; CHECK: [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[UV9]](s16)
+    ; CHECK: [[ANYEXT6:%[0-9]+]]:_(s32) = G_ANYEXT [[UV10]](s16)
+    ; CHECK: [[ANYEXT7:%[0-9]+]]:_(s32) = G_ANYEXT [[UV11]](s16)
+    ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32)
+    ; CHECK: $vgpr1 = COPY [[ANYEXT1]](s32)
+    ; CHECK: $vgpr2 = COPY [[ANYEXT2]](s32)
+    ; CHECK: $vgpr3 = COPY [[ANYEXT3]](s32)
+    ; CHECK: $vgpr4 = COPY [[ANYEXT4]](s32)
+    ; CHECK: $vgpr5 = COPY [[ANYEXT5]](s32)
+    ; CHECK: $vgpr6 = COPY [[ANYEXT6]](s32)
+    ; CHECK: $vgpr7 = COPY [[ANYEXT7]](s32)
+    %0:_(s64) = COPY $vgpr0_vgpr1
+    %1:_(s8), %2:_(s8), %3:_(s8), %4:_(s8), %5:_(s8), %6:_(s8), %7:_(s8), %8:_(s8) = G_UNMERGE_VALUES %0
+    %10:_(s32) = G_ANYEXT %1
+    %11:_(s32) = G_ANYEXT %2
+    %12:_(s32) = G_ANYEXT %3
+    %13:_(s32) = G_ANYEXT %4
+    %14:_(s32) = G_ANYEXT %5
+    %15:_(s32) = G_ANYEXT %6
+    %16:_(s32) = G_ANYEXT %7
+    %17:_(s32) = G_ANYEXT %8
+    $vgpr0 = COPY %10
+    $vgpr1 = COPY %11
+    $vgpr2 = COPY %12
+    $vgpr3 = COPY %13
+    $vgpr4 = COPY %14
+    $vgpr5 = COPY %15
+    $vgpr6 = COPY %16
+    $vgpr7 = COPY %17
+...
+
+---
+name: test_unmerge_s8_p1
+body: |
+  bb.0:
+    liveins: $vgpr0_vgpr1
+    ; CHECK-LABEL: name: test_unmerge_s8_p1
+    ; CHECK: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
+    ; CHECK: [[UV:%[0-9]+]]:_(s8), [[UV1:%[0-9]+]]:_(s8), [[UV2:%[0-9]+]]:_(s8), [[UV3:%[0-9]+]]:_(s8), [[UV4:%[0-9]+]]:_(s8), [[UV5:%[0-9]+]]:_(s8), [[UV6:%[0-9]+]]:_(s8), [[UV7:%[0-9]+]]:_(s8) = G_UNMERGE_VALUES [[COPY]](p1)
+    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s8)
+    ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s8)
+    ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s8)
+    ; CHECK: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s8)
+    ; CHECK: [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s8)
+    ; CHECK: [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s8)
+    ; CHECK: [[ANYEXT6:%[0-9]+]]:_(s32) = G_ANYEXT [[UV6]](s8)
+    ; CHECK: [[ANYEXT7:%[0-9]+]]:_(s32) = G_ANYEXT [[UV7]](s8)
+    ; CHECK: $vgpr0 = COPY [[ANYEXT]](s32)
+    ; CHECK: $vgpr1 = COPY [[ANYEXT1]](s32)
+    ; CHECK: $vgpr2 = COPY [[ANYEXT2]](s32)
+    ; CHECK: $vgpr3 = COPY [[ANYEXT3]](s32)
+    ; CHECK: $vgpr4 = COPY [[ANYEXT4]](s32)
+    ; CHECK: $vgpr5 = COPY [[ANYEXT5]](s32)
+    ; CHECK: $vgpr6 = COPY [[ANYEXT6]](s32)
+    ; CHECK: $vgpr7 = COPY [[ANYEXT7]](s32)
+    %0:_(p1) = COPY $vgpr0_vgpr1
+    %1:_(s8), %2:_(s8), %3:_(s8), %4:_(s8), %5:_(s8), %6:_(s8), %7:_(s8), %8:_(s8) = G_UNMERGE_VALUES %0
+    %10:_(s32) = G_ANYEXT %1
+    %11:_(s32) = G_ANYEXT %2
+    %12:_(s32) = G_ANYEXT %3
+    %13:_(s32) = G_ANYEXT %4
+    %14:_(s32) = G_ANYEXT %5
+    %15:_(s32) = G_ANYEXT %6
+    %16:_(s32) = G_ANYEXT %7
+    %17:_(s32) = G_ANYEXT %8
+    $vgpr0 = COPY %10
+    $vgpr1 = COPY %11
+    $vgpr2 = COPY %12
+    $vgpr3 = COPY %13
+    $vgpr4 = COPY %14
+    $vgpr5 = COPY %15
+    $vgpr6 = COPY %16
+    $vgpr7 = COPY %17
+...
+
 ---
 name: test_unmerge_s16_s32
 body: |


        


More information about the llvm-commits mailing list