[llvm] [GlobalIsel] Combine cast of const integer II (PR #100835)

Thorsten Schütt via llvm-commits llvm-commits at lists.llvm.org
Sun Jul 28 08:32:46 PDT 2024


================
@@ -129,3 +129,137 @@ body:             |
     %res:_(<2 x s64>) = G_SELECT %cond(<2 x s32>), %bv, %bv2
     %small:_(<2 x s32>) = G_TRUNC %res(<2 x s64>)
     $x0 = COPY %small(<2 x s32>)
+
+...
+---
+name:            zext_const
+legalized: true
+body:             |
+  bb.0:
+    liveins: $w0, $w1
+    ; CHECK-PRE-LABEL: name: zext_const
+    ; CHECK-PRE: liveins: $w0, $w1
+    ; CHECK-PRE-NEXT: {{  $}}
+    ; CHECK-PRE-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 5
+    ; CHECK-PRE-NEXT: $x0 = COPY [[C]](s64)
+    ;
+    ; CHECK-POST-LABEL: name: zext_const
+    ; CHECK-POST: liveins: $w0, $w1
+    ; CHECK-POST-NEXT: {{  $}}
+    ; CHECK-POST-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 5
+    ; CHECK-POST-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[C]](s32)
+    ; CHECK-POST-NEXT: $x0 = COPY [[ZEXT]](s64)
+    %2:_(s32) = G_CONSTANT i32 5
+    %3:_(s64) = G_ZEXT %2
+    $x0 = COPY %3
+...
+---
+name:            sext_const
+legalized: true
+body:             |
+  bb.0:
+    liveins: $q0, $q1
+    ; CHECK-PRE-LABEL: name: sext_const
+    ; CHECK-PRE: liveins: $q0, $q1
+    ; CHECK-PRE-NEXT: {{  $}}
+    ; CHECK-PRE-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -5
+    ; CHECK-PRE-NEXT: $x0 = COPY [[C]](s64)
+    ;
+    ; CHECK-POST-LABEL: name: sext_const
+    ; CHECK-POST: liveins: $q0, $q1
+    ; CHECK-POST-NEXT: {{  $}}
+    ; CHECK-POST-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -5
+    ; CHECK-POST-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[C]](s32)
+    ; CHECK-POST-NEXT: $x0 = COPY [[SEXT]](s64)
+    %2:_(s32) = G_CONSTANT i32 -5
+    %3:_(s64) = G_SEXT %2
+    $x0 = COPY %3
+...
+---
+name:            trunc_const
+legalized: true
+body:             |
+  bb.0:
+    liveins: $q0, $q1
+    ; CHECK-PRE-LABEL: name: trunc_const
+    ; CHECK-PRE: liveins: $q0, $q1
+    ; CHECK-PRE-NEXT: {{  $}}
+    ; CHECK-PRE-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 705032704
+    ; CHECK-PRE-NEXT: $w0 = COPY [[C]](s32)
+    ;
+    ; CHECK-POST-LABEL: name: trunc_const
+    ; CHECK-POST: liveins: $q0, $q1
+    ; CHECK-POST-NEXT: {{  $}}
+    ; CHECK-POST-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 5000000000
+    ; CHECK-POST-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[C]](s64)
+    ; CHECK-POST-NEXT: $w0 = COPY [[TRUNC]](s32)
+    %2:_(s64) = G_CONSTANT i64 5000000000
+    %3:_(s32) = G_TRUNC %2
+    $w0 = COPY %3
+...
+---
+name:            trunc_const_bv
+legalized: true
+body:             |
+  bb.0:
+    liveins: $q0, $q1
+    ; CHECK-LABEL: name: trunc_const_bv
+    ; CHECK: liveins: $q0, $q1
+    ; CHECK-NEXT: {{  $}}
+    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 5000000000
+    ; CHECK-NEXT: %bv:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
+    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<2 x s32>) = G_TRUNC %bv(<2 x s64>)
+    ; CHECK-NEXT: $x0 = COPY [[TRUNC]](<2 x s32>)
+    %2:_(s64) = G_CONSTANT i64 5000000000
+    %bv:_(<2 x s64>) = G_BUILD_VECTOR %2, %2
+    %3:_(<2 x s32>) = G_TRUNC %bv
+    $x0 = COPY %3
+...
+---
+name:            anyext_const
+legalized: true
+body:             |
+  bb.0:
+    liveins: $q0, $q1
+    ; CHECK-PRE-LABEL: name: anyext_const
+    ; CHECK-PRE: liveins: $q0, $q1
+    ; CHECK-PRE-NEXT: {{  $}}
+    ; CHECK-PRE-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 500
+    ; CHECK-PRE-NEXT: $x0 = COPY [[C]](s64)
+    ;
+    ; CHECK-POST-LABEL: name: anyext_const
+    ; CHECK-POST: liveins: $q0, $q1
+    ; CHECK-POST-NEXT: {{  $}}
+    ; CHECK-POST-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 500
+    ; CHECK-POST-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[C]](s32)
+    ; CHECK-POST-NEXT: $x0 = COPY [[ANYEXT]](s64)
+    %2:_(s32) = G_CONSTANT i32 500
+    %3:_(s64) = G_ANYEXT %2
+    $x0 = COPY %3
+...
+---
+name:            mul_const
+legalized: true
+body:             |
+  bb.0:
+    liveins: $q0, $q1
+    ; CHECK-PRE-LABEL: name: mul_const
+    ; CHECK-PRE: liveins: $q0, $q1
+    ; CHECK-PRE-NEXT: {{  $}}
+    ; CHECK-PRE-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
+    ; CHECK-PRE-NEXT: $x0 = COPY [[C]](s64)
+    ;
+    ; CHECK-POST-LABEL: name: mul_const
+    ; CHECK-POST: liveins: $q0, $q1
+    ; CHECK-POST-NEXT: {{  $}}
+    ; CHECK-POST-NEXT: %x:_(s32) = COPY $w0
+    ; CHECK-POST-NEXT: [[SUB:%[0-9]+]]:_(s32) = G_SUB %x, %x
+    ; CHECK-POST-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 32
+    ; CHECK-POST-NEXT: %mul:_(s32) = G_SHL [[SUB]], [[C]](s64)
+    ; CHECK-POST-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT %mul(s32)
+    ; CHECK-POST-NEXT: $x0 = COPY [[ANYEXT]](s64)
+    %x:_(s32) = COPY $w0
+    %zero:_(s32) = G_CONSTANT i32 0
+    %mul:_(s32) = G_MUL %x, %zero
----------------
tschuett wrote:

I marked the code legal. It looks legal to my eyes, but the post legalizer combiner did funny things.

https://github.com/llvm/llvm-project/pull/100835


More information about the llvm-commits mailing list